<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Interactive BOM for KiCAD</title>
  <style type="text/css">
:root {
  --pcb-edge-color: black;
  --pad-color: #878787;
  --pad-hole-color: #CCCCCC;
  --pad-color-highlight: #D04040;
  --pad-color-highlight-both: #D0D040;
  --pad-color-highlight-marked: #44a344;
  --pin1-outline-color: #ffb629;
  --pin1-outline-color-highlight: #ffb629;
  --pin1-outline-color-highlight-both: #fcbb39;
  --pin1-outline-color-highlight-marked: #fdbe41;
  --silkscreen-edge-color: #aa4;
  --silkscreen-polygon-color: #4aa;
  --silkscreen-text-color: #4aa;
  --fabrication-edge-color: #907651;
  --fabrication-polygon-color: #907651;
  --fabrication-text-color: #a27c24;
  --track-color: #def5f1;
  --track-color-highlight: #D04040;
  --zone-color: #def5f1;
  --zone-color-highlight: #d0404080;
}

html,
body {
  margin: 0px;
  height: 100%;
  font-family: Verdana, sans-serif;
}

.dark.topmostdiv {
  --pcb-edge-color: #eee;
  --pad-color: #808080;
  --pin1-outline-color: #ffa800;
  --pin1-outline-color-highlight: #ccff00;
  --track-color: #42524f;
  --zone-color: #42524f;
  background-color: #252c30;
  color: #eee;
}

button {
  background-color: #eee;
  border: 1px solid #888;
  color: black;
  height: 44px;
  width: 44px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 14px;
  font-weight: bolder;
}

.dark button {
  /* This will be inverted */
  background-color: #c3b7b5;
}

button.depressed {
  background-color: #0a0;
  color: white;
}

.dark button.depressed {
  /* This will be inverted */
  background-color: #b3b;
}

button:focus {
  outline: 0;
}

button#tb-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#lr-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#bom-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-grouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-ungrouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-netlist-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}

button#copy {
  background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
  background-position: 6px 6px;
  background-repeat: no-repeat;
  background-size: 26px 26px;
  border-radius: 6px;
  height: 40px;
  width: 40px;
  margin: 10px 5px;
}

button#copy:active {
  box-shadow: inset 0px 0px 5px #6c6c6c;
}

textarea.clipboard-temp {
  position: fixed;
  top: 0;
  left: 0;
  width: 2em;
  height: 2em;
  padding: 0;
  border: None;
  outline: None;
  box-shadow: None;
  background: transparent;
}

.left-most-button {
  border-right: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 6px;
}

.middle-button {
  border-right: 0;
}

.right-most-button {
  border-top-right-radius: 6px;
  border-bottom-right-radius: 6px;
}

.button-container {
  font-size: 0;
  margin: 10px 10px 10px 0px;
}

.dark .button-container {
  filter: invert(1);
}

.button-container button {
  background-size: 32px 32px;
  background-position: 5px 5px;
  background-repeat: no-repeat;
}

@media print {
  .hideonprint {
    display: none;
  }
}

canvas {
  cursor: crosshair;
}

canvas:active {
  cursor: grabbing;
}

.fileinfo {
  width: 100%;
  max-width: 1000px;
  border: none;
  padding: 5px;
}

.fileinfo .title {
  font-size: 20pt;
  font-weight: bold;
}

.fileinfo td {
  overflow: hidden;
  white-space: nowrap;
  max-width: 1px;
  width: 50%;
  text-overflow: ellipsis;
}

.bom {
  border-collapse: collapse;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 10pt;
  table-layout: fixed;
  width: 100%;
  margin-top: 1px;
  position: relative;
}

.bom th,
.bom td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

.dark .bom th,
.dark .bom td {
  border: 1px solid #777;
}

.bom th {
  background-color: #CCCCCC;
  background-clip: padding-box;
}

.dark .bom th {
  background-color: #3b4749;
}

.bom tr.highlighted:nth-child(n) {
  background-color: #cfc;
}

.dark .bom tr.highlighted:nth-child(n) {
  background-color: #226022;
}

.bom tr:nth-child(even) {
  background-color: #f2f2f2;
}

.dark .bom tr:nth-child(even) {
  background-color: #313b40;
}

.bom tr.checked {
  color: #1cb53d;
}

.dark .bom tr.checked {
  color: #2cce54;
}

.bom tr {
  transition: background-color 0.2s;
}

.bom .numCol {
  width: 30px;
}

.bom .value {
  width: 15%;
}

.bom .quantity {
  width: 65px;
}

.bom th .sortmark {
  position: absolute;
  right: 1px;
  top: 1px;
  margin-top: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent transparent #221 transparent;
  transform-origin: 50% 85%;
  transition: opacity 0.2s, transform 0.4s;
}

.dark .bom th .sortmark {
  filter: invert(1);
}

.bom th .sortmark.none {
  opacity: 0;
}

.bom th .sortmark.desc {
  transform: rotate(180deg);
}

.bom th:hover .sortmark.none {
  opacity: 0.5;
}

.bom .bom-checkbox {
  width: 30px;
  position: relative;
  user-select: none;
  -moz-user-select: none;
}

.bom .bom-checkbox:before {
  content: "";
  position: absolute;
  border-width: 15px;
  border-style: solid;
  border-color: #51829f transparent transparent transparent;
  visibility: hidden;
  top: -15px;
}

.bom .bom-checkbox:after {
  content: "Double click to set/unset all";
  position: absolute;
  color: white;
  top: -35px;
  left: -26px;
  background: #51829f;
  padding: 5px 15px;
  border-radius: 8px;
  white-space: nowrap;
  visibility: hidden;
}

.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
  visibility: visible;
  transition: visibility 0.2s linear 1s;
}

.split {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow-y: auto;
  overflow-x: hidden;
  background-color: inherit;
}

.split.split-horizontal,
.gutter.gutter-horizontal {
  height: 100%;
  float: left;
}

.gutter {
  background-color: #ddd;
  background-repeat: no-repeat;
  background-position: 50%;
  transition: background-color 0.3s;
}

.dark .gutter {
  background-color: #777;
}

.gutter.gutter-horizontal {
  background-image: url('');
  cursor: ew-resize;
  width: 5px;
}

.gutter.gutter-vertical {
  background-image: url('');
  cursor: ns-resize;
  height: 5px;
}

.searchbox {
  float: left;
  height: 40px;
  margin: 10px 5px;
  padding: 12px 32px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 18px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 6px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  background-image: url('');
  background-position: 10px 10px;
  background-repeat: no-repeat;
}

.dark .searchbox {
  background-color: #111;
  color: #eee;
}

.searchbox::placeholder {
  color: #ccc;
}

.dark .searchbox::placeholder {
  color: #666;
}

.filter {
  width: calc(60% - 64px);
}

.reflookup {
  width: calc(40% - 10px);
}

input[type=text]:focus {
  background-color: white;
  border: 1px solid #333;
}

.dark input[type=text]:focus {
  background-color: #333;
  border: 1px solid #ccc;
}

mark.highlight {
  background-color: #5050ff;
  color: #fff;
  padding: 2px;
  border-radius: 6px;
}

.dark mark.highlight {
  background-color: #76a6da;
  color: #111;
}

.menubtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
  background-position: center;
  background-repeat: no-repeat;
}

.statsbtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.iobtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.visbtn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
  padding: 15px;
}

#vismenu-content {
  left: 0px;
  font-family: Verdana, sans-serif;
}

.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
  filter: invert(1);
}

.flexbox {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.savebtn {
  background-color: #d6d6d6;
  width: auto;
  height: 30px;
  flex-grow: 1;
  margin: 5px;
  border-radius: 4px;
}

.savebtn:active {
  background-color: #0a0;
  color: white;
}

.dark .savebtn:active {
  /* This will be inverted */
  background-color: #b3b;
}

.stats {
  border-collapse: collapse;
  font-size: 12pt;
  table-layout: fixed;
  width: 100%;
  min-width: 450px;
}

.dark .stats td {
  border: 1px solid #bbb;
}

.stats td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

#checkbox-stats div {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#checkbox-stats .bar {
  background-color: rgba(28, 251, 0, 0.6);
}

.menu {
  position: relative;
  display: inline-block;
  margin: 10px 10px 10px 0px;
}

.menu-content {
  font-size: 12pt !important;
  text-align: left !important;
  font-weight: normal !important;
  display: none;
  position: absolute;
  background-color: white;
  right: 0;
  min-width: 300px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 100;
  padding: 8px;
}

.dark .menu-content {
  background-color: #111;
}

.menu:hover .menu-content {
  display: block;
}

.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
  background-color: #eee;
}

.menu-label {
  display: inline-block;
  padding: 8px;
  border: 1px solid #ccc;
  border-top: 0;
  width: calc(100% - 18px);
}

.menu-label-top {
  border-top: 1px solid #ccc;
}

.menu-textbox {
  float: left;
  height: 24px;
  margin: 10px 5px;
  padding: 5px 5px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 14px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 4px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  width: calc(100% - 10px);
}

.menu-textbox.invalid,
.dark .menu-textbox.invalid {
  color: red;
}

.dark .menu-textbox {
  background-color: #222;
  color: #eee;
}

.radio-container {
  margin: 4px;
}

.topmostdiv {
  width: 100%;
  height: 100%;
  background-color: white;
  transition: background-color 0.3s;
}

#top {
  height: 78px;
  border-bottom: 2px solid black;
}

.dark #top {
  border-bottom: 2px solid #ccc;
}

#dbg {
  display: block;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: #aaa;
}

::-webkit-scrollbar-thumb {
  background: #666;
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  margin: 3px 0;
  padding: 0;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  border-radius: 3px;
}

.slider:hover {
  opacity: 1;
}

.slider:focus {
  outline: none;
}

.slider::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  width: 100%;
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
  border: none;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin-top: -4px;
}

.dark .slider::-webkit-slider-thumb {
  background: #3d3;
}

.slider::-moz-range-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
}

.slider::-moz-range-track {
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
}

.dark .slider::-moz-range-thumb {
  background: #3d3;
}

.slider::-ms-track {
  width: 100%;
  height: 8px;
  border-width: 3px 0;
  background: transparent;
  border-color: transparent;
  color: transparent;
  transition: opacity .2s;
}

.slider::-ms-fill-lower {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-fill-upper {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin: 0;
}

.shameless-plug {
  font-size: 0.8em;
  text-align: center;
  display: block;
}

a {
  color: #0278a4;
}

.dark a {
  color: #00b9fd;
}

#frontcanvas,
#backcanvas {
  touch-action: none;
}

.placeholder {
  border: 1px dashed #9f9fda !important;
  background-color: #edf2f7 !important;
}

.dragging {
  z-index: 999;
}

.dark .dragging>table>tbody>tr {
  background-color: #252c30;
}

.dark .placeholder {
  filter: invert(1);
}

.column-spacer {
  top: 0;
  left: 0;
  width: calc(100% - 4px);
  position: absolute;
  cursor: pointer;
  user-select: none;
  height: 100%;
}

.column-width-handle {
  top: 0;
  right: 0;
  width: 4px;
  position: absolute;
  cursor: col-resize;
  user-select: none;
  height: 100%;
}

.column-width-handle:hover {
  background-color: #4f99bd;
}

.help-link {
  border: 1px solid #0278a4;
  padding-inline: 0.3rem;
  border-radius: 3px;
  cursor: pointer;
}

.dark .help-link {
  border: 1px solid #00b9fd;
}


  </style>
  <script type="text/javascript" >
///////////////////////////////////////////////
/*
  Split.js - v1.3.5
  MIT License
  https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});

///////////////////////////////////////////////

///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////

///////////////////////////////////////////////
/*!
 * PEP v0.4.3 | https://github.com/jquery/PEP
 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
 */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});

///////////////////////////////////////////////

///////////////////////////////////////////////
var config = {"dark_mode": true, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////

///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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FwHURKwWSQcAVk+QgFanlIBdT5O/l0+WgF4fmj+ZH5WAUT+Wf5uAUc+Vz5SfmXAPO5DLn8+Su5gvmZ+fs5OfmieW/5p0ynadJ5X/mXAD/58vnkBYr5k5SIBbX5P3kPufX51/kEBW75RAX72F758EkyBWv58cob+dQ01AVwgHN5tPlm+WH5mbmMBZgFLPl2+fg8cfl4BS75qgUQBeoFI0R/WItpwL4d+Qb5UPlUBVv5NAUoBXQFpgXUeeYF1vnMBaf51gXn+Xt5l/lcBbz5PAVp+XwFGfnneRu5QgXi+aG593mO8CDZxfknuaX5v/naBR95cgVqed95yGy/ecoFc/mQBUkFg4F+WBwBbgVdBIb51fmMNMR5yAX9+agFfgUj+YO5TAWWBYx5rAVY+U75OPl2BQC5GvldeUT51NhRIH/57gUU+dUFVPmGBTT58PmD+bi5/gXNBRYFtvltBSEFbAUX+dz5EQUp+VEFt/mnebEFssnXeWL5r/lsxoIwjpzo2VohaQXf+RkF0gWuuRX5wlzh/IAFjtggBaYAKgU9BYQFfQUR8QMF9twXBfAFugVeueY0pXk+BSYFYHlI+Yz5swWBBa0Fyrk2BdP5+AWPBWoFzwVeVNHo3dTaBcMFAflqed8FRgWTBXv5DAVAhbSAx/nYBZP5SwVhBSsFrIDcBYu5GwXp+bYA53mJ0QkFewWhuS8Fb1ROoScFkgVnBYyif/nZBRNgXwXABYoFmnn2BW158/n7BdSFwyDqLvCFlQUeBdUFyIUTBQP5aIVmBRiFkEBYhSwFiwUdBV18zvnlueAFXIXFBfVYcLag+d/gAoVd+XoFDDQihbQFfwVD+QCFlvmH+cCF8wWghaEF03mJ+bO5qwUPBfYAvAX3+fwFOznZ+TsFuflWuWy5Xqj/gGV44gWy+QkiLAhMhZX5SvnVBWyF+QVKBaAFNoW9BUD5ZUhiUNdcnnjaBWkwVQU3BTD5eoWh+f8FFvkH+cz5poU4BXKFlgAKhTF5SoVN+RGFhWRK3KV4rngd+XGFQoUJhTl5SYVTBcP5gIVW+ZiFQQVWBeO5u3kWheEFBIWRBUSFzLkkhSa5bSHOhcIF+wW3pEQ0DYxehSX5L3mZBe8F7rn+hTkFwoVBhV18BQWhhUUFjgVhuSGIXFB/+WWFIwU3BbqFvwXJhQaFqYUYBSaF0fmNhcx5tgWKhZyF+YWE+QOFyl7lBav5a4WIhdOFlYVbhdWFhoVphWP52IXtBcW57AXTuZwFbYVrBR2Fd/lbOfwF/HmCBb2FiQV4WA0SknlF+TJ5I4WwGoIs+Mgd+WMELoCqeYGFKvnshWr5kIUQBQl5i4VBSF9RNoDaBeegB3SB+XUFdnn5eVuYU3mc+TN5PwW2AAt5S3lkRSt514XreY75J/mHhWCFnQUz+S15eYXxeR15KoUSQGBF6GxAQB35eEW79ARF3gW2APZ543nGhbYApEVZgCt5c3lURZV5y3kleXRFuQAbeRmFOIWquWxFp4UcRSAAnXkFhWCQPEU42LhF9EVdeIzUiYXSgKJFLO51hbCAkkXkRTJFPnmLeXJFNEUKRTV59EUTuSpFb4Xx+XiFX4XGAISFtoXRBfaFsQUUAM/5uwV5+Wy5xsZXPn15dIXNUj6FLrlnAKv5zIXXBao0M4WfORyFaEXKhY4FdDEwBc6wmoWUBdUFBgUURbCAxgXbhdMFTQUWRWcA0oXBBU2F4IXdBdp5qUVdeZBwitZ/UX15FQVahfIFJkX1Bb4FKYXoBQEF9YUghZmF74XLBZ5F3kV2hf+FGfkAAKpARS/5wUWgjMXo6tjAvhFF/PTdPGHU2gW3pCwAf94tRchFwYXJRdVFZ4WpLrgIELkUeLGFZEKP/GtFffn5RaiF9AUNJOJFUoUNhQsFFUUsRRCFW0XchaCMBNytyJ/oB0WVMogMx0WERc8AZ0WNBXJAJUVwgGVFTEXs+epFKUXbRWy5z0UnWK4FdEXvRQMAn0XCRadFYoXnRRvQl0WlRddFZoVsBSDFD0VcRXFwEMUpOChc/XmNjDDFTK4JRfeFbUX6hUVFf0UoxQDFaMW9Rc15+wALhbVFuMUCuGdYpYWHRR9FngWtRQjFDQUdRfKg/0WwAIDFN0VHhbP57EXYxRjot4KiqEq8BMVYjETFvkptALlFKIWIxb9FjTRUxfzFNMWqRe+FmMXhhWJ5EOQwBXakb0XztrLFWNQnRd9FisU8xRdF6YUHhYLFNgXCxRpFosWW5LrFEAj6xUdqcMXjBVWF4oXIxRbFjEVWxcDF9MUixWlFu0WQxbh50MUGxS7FeUUmxdzFO4X9uXw4nsWvhbKFGsW+xbbF/sWZEBC5r0XjhYTFIcUcxaTFXMXtRZHFvMUqxQLF6MVqRQnFoMWPRdCxVlrhKGtYrMUyxaHFCsURxRTFysUxxTKFTYU2xSXFdsU6xRC5tVpOxUdFmcXGxXD5psW5xebFL4VNxULFmsVPBQWFh25afpPZXcXsxTlFXgWuxQ+F7sVZ5I3F5UUjxcXFWMVpRUzFachBxU5F1cU9xV9FfcV1xTWFDcVDxSvF1sX9RVaF34U2hUNF0nkZ+YBFgUUuhYT5YzCL8WRIxwWQRekFcFryedoFXbgqeUZFgjTrRbOFIYX3BUUFGEV9BU/Fljj8WMFocEWDebRIQkXzxSJFxEVuaFZF0kWw+bJFjIBSRY5F37l1eZbFyrnzti5Fd0VVRQD5ICU6RWAl4LSjJlLFisD4RUb5+8VmRYyAiCVFefJFs3koJbZF1EXoJdV5mCWJHJt5K8W4JacOYYX4+UQlj8WvsWLYGKrkJdAliEUVhb3FNCX/RUglJXk2RRV5aCXkRYpFWCVexTglO3kfhZaFh3lXxb5Fw0W2AIJ598V9hZh0hD43SSZ5n/nXOShgn8VpxSqcDzQ9gIH5dwVgBbbF/CUe+eShnNiQJbFFg3nnoLAlYcX0eQglhXnyJcglZXnMJfZFrCWsxUpFDEWxxTSiU/n4JSeFrcUOJVAFTiU4dF14UCXrxngl4iXUJd4lk3n0JQ5FjCX+JXIlVXnBJUolYSWMoj7FdiXRJZxFjgWGJTtRZiCNRa4lSSUeJXN5kiVUxdIlWSXSgKgluSWKJRwlrkVbsqol58UaJcd5xIUxBaSF3kB6JSBFjHjCPOEoF7S81G/FpwWjhecFMUWKeXFFfXnGRf/FSUWoRevFtUVG4D9UBDR8Rav5CIXd+cY0WcXhxTnF9cXPhS0FHSW3RfKFXQVRJaslBYXQBaZsjOmYWE1F2UUpJfDFByXkxUfFxyVzBdgltMXNhWRF6iVX+b0lnYX9JRd5sgBDJZSFa4gA6ik4l5IQRRIFkUXOuee5UCVXBQslm/mJRXOFQCV+xc352zxfUYSUEwxSxTsl2oVyxXPFniUFRY+Fu4VdRVdFPUXqxckl2YUXJbmFicVrJRGuO1FYpSv5+vmCheuFJMW9xUSli8W1hfnFasVuRd8lHAUXxV5F7YU+RX0lfkW7OXQeFIWTRZ84ELEhQYe5kyX0hdMljIVZBZOFLIU9xbYlvCVQhePFJ/AQuZIwB0U/ubeFNwXyxaKFh8VPhXuF3UWnJUeFlU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ZVBpXNlWVVbZUOVcRVaFX8VRhVzFVCVd+VnlXwVQlVvlUgVXiAlmBMuXqgblWDldhVv5W4VdRValUPlTxVIAAZwFNV8lX6AJGV7lVKVZ5VqlWcVepV41X6ABlAFmXVVYWVxlW5VaZVjVXVlc1VVlUNle1VdlVdVcGVMlVteT2VM1WXlR5V81VeVYtV+1XLVZpVeUBMued5hRVvVV+Vm5WfVSNVtFV+VcGVTlVteX5V/HlRANkV1ZV1lfpV1gALdKwAsNXw1dYA9gBItJqVBaC+lcjV+QDwAOd53bmQACpVCQC6lfVAKVUTVYFVbXlrmMpl1YDylTs5ClWDVaDVsFWJlV6VS1WEVX9VaVUw1YeVcNUI1RZVCYDwAPjVqNUgAOjV/NUCzDjVigB41SjVhNXE1RAApNWUAOTVCVXBlZVVNNV01fKVrlUDVdtVQ1Vg1d5Vo1UHVfRVE1W9VW15dkD6VYUV+lXwACNFnRV2QBkVa5imlYyABRVA1d1utYCxoosVhJWPFTs5qxVQ1McVbxUe1bsV03RwlXs5pwBHFYHVFxW28FcV8QW3Fed59xV4Jb8VzxXLFY/5bxWx1QIFXxVklUiVQnkAled5QJUfFU/5LADglUiVkJUfFTCVB+UItPCVLoAl1b8V6JUyAHSVeJUElXS0sJV4lQyVTJVLFYG0rJVbFQHVjdWclQCVd8V0tLyVCXmu1ScVOaIN1aXVyJVbFf0IWJVslbiVpdUklTmiadWN1V7lWxX51fPVbJWYld1uIXAAtGYA8AAJFeIAVYCLOaOV4gDKQHmAY27KBXc0S2VHKWDYtGiINKOQKwiaQIuARVi8hX5ICqGmoYjUYNSDqLfVJoA6eJx0P1iJeP0YQ74SxS7+79X5gNO4yhhfUbCQ1z5MGRp4N9VUgPfVMIV+WDFK61jM4OBlbLA4SflwgDWgAJ/V5cUzRfK4AnTTwMC+eOhoNdy4f9Xe+UFBwJTENVA1d9U6uDg1UYVLKSYhtujkNR/VwDWwNWBg8DWmoWqFYGD0DBY0BDWtHrEgV9Xn1RI4F4UfuaQxEHnQNbXuseVsCHw1Dv6kNeI1Lv7KAKpALIAgAI2VOzmM1RQ1ISgZMFR4PBmfVPSQKwiyNW0FCjVKNehgp9WAKdfVADRGNUcpeOg6NfI1ijXKNQw1mMgU6CdY2DQ3KSMgrwXaNfoAcjW2AF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"))
///////////////////////////////////////////////

///////////////////////////////////////////////
/* Utility functions */

var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  pcbdata.metadata.revision + '__#';
var storage;

function initStorage(key) {
  try {
    window.localStorage.getItem("blank");
    storage = window.localStorage;
  } catch (e) {
    // localStorage not available
  }
  if (!storage) {
    try {
      window.sessionStorage.getItem("blank");
      storage = window.sessionStorage;
    } catch (e) {
      // sessionStorage also not available
    }
  }
}

function readStorage(key) {
  if (storage) {
    return storage.getItem(storagePrefix + key);
  } else {
    return null;
  }
}

function writeStorage(key, value) {
  if (storage) {
    storage.setItem(storagePrefix + key, value);
  }
}

function fancyDblClickHandler(el, onsingle, ondouble) {
  return function() {
    if (el.getAttribute("data-dblclick") == null) {
      el.setAttribute("data-dblclick", 1);
      setTimeout(function() {
        if (el.getAttribute("data-dblclick") == 1) {
          onsingle();
        }
        el.removeAttribute("data-dblclick");
      }, 200);
    } else {
      el.removeAttribute("data-dblclick");
      ondouble();
    }
  }
}

function smoothScrollToRow(rowid) {
  document.getElementById(rowid).scrollIntoView({
    behavior: "smooth",
    block: "center",
    inline: "nearest"
  });
}

function focusInputField(input) {
  input.scrollIntoView(false);
  input.focus();
  input.select();
}

function saveBomTable(output) {
  var text = '';
  for (var node of bomhead.childNodes[0].childNodes) {
    if (node.firstChild) {
      text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
    }
    if (node != bomhead.childNodes[0].lastChild) {
      text += (output == 'csv' ? ',' : '\t');
    }
  }
  text += '\n';
  for (var row of bombody.childNodes) {
    for (var cell of row.childNodes) {
      let val = '';
      for (var node of cell.childNodes) {
        if (node.nodeName == "INPUT") {
          if (node.checked) {
            val += '✓';
          }
        } else if (node.nodeName == "MARK") {
          val += node.firstChild.nodeValue;
        } else {
          val += node.nodeValue;
        }
      }
      if (output == 'csv') {
        val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
        if (isNumeric(val)) {
          val = +val;                     // use number
        } else {
          val = `"${val}"`;               // enclosed within double-quote
        }
      }
      text += val;
      if (cell != row.lastChild) {
        text += (output == 'csv' ? ',' : '\t');
      }
    }
    text += '\n';
  }

  if (output != 'clipboard') {
    // To file: csv or txt
    var blob = new Blob([text], {
      type: `text/${output}`
    });
    saveFile(`${pcbdata.metadata.title}.${output}`, blob);
  } else {
    // To clipboard
    var textArea = document.createElement("textarea");
    textArea.classList.add('clipboard-temp');
    textArea.value = text;

    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
      if (document.execCommand('copy')) {
        console.log('Bom copied to clipboard.');
      }
    } catch (err) {
      console.log('Can not copy to clipboard.');
    }

    document.body.removeChild(textArea);
  }
}

function isNumeric(str) {
  /* https://stackoverflow.com/a/175787 */
  return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}

function removeGutterNode(node) {
  for (var i = 0; i < node.childNodes.length; i++) {
    if (node.childNodes[i].classList &&
      node.childNodes[i].classList.contains("gutter")) {
      node.removeChild(node.childNodes[i]);
      break;
    }
  }
}

function cleanGutters() {
  removeGutterNode(document.getElementById("bot"));
  removeGutterNode(document.getElementById("canvasdiv"));
}

var units = {
  prefixes: {
    giga: ["G", "g", "giga", "Giga", "GIGA"],
    mega: ["M", "mega", "Mega", "MEGA"],
    kilo: ["K", "k", "kilo", "Kilo", "KILO"],
    milli: ["m", "milli", "Milli", "MILLI"],
    micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
    nano: ["N", "n", "nano", "Nano", "NANO"],
    pico: ["P", "p", "pico", "Pico", "PICO"],
  },
  unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  unitsLong: [
    "OHM", "Ohm", "ohm", "ohms",
    "FARAD", "Farad", "farad",
    "HENRY", "Henry", "henry"
  ],
  getMultiplier: function(s) {
    if (this.prefixes.giga.includes(s)) return 1e9;
    if (this.prefixes.mega.includes(s)) return 1e6;
    if (this.prefixes.kilo.includes(s)) return 1e3;
    if (this.prefixes.milli.includes(s)) return 1e-3;
    if (this.prefixes.micro.includes(s)) return 1e-6;
    if (this.prefixes.nano.includes(s)) return 1e-9;
    if (this.prefixes.pico.includes(s)) return 1e-12;
    return 1;
  },
  valueRegex: null,
}

function initUtils() {
  var allPrefixes = units.prefixes.giga
    .concat(units.prefixes.mega)
    .concat(units.prefixes.kilo)
    .concat(units.prefixes.milli)
    .concat(units.prefixes.micro)
    .concat(units.prefixes.nano)
    .concat(units.prefixes.pico);
  var allUnits = units.unitsShort.concat(units.unitsLong);
  units.valueRegex = new RegExp("^([0-9\.]+)" +
    "\\s*(" + allPrefixes.join("|") + ")?" +
    "(" + allUnits.join("|") + ")?" +
    "(\\b.*)?$", "");
  units.valueAltRegex = new RegExp("^([0-9]*)" +
    "(" + units.unitsShort.join("|") + ")?" +
    "([GgMmKkUuNnPp])?" +
    "([0-9]*)" +
    "(\\b.*)?$", "");
  if (config.fields.includes("Value")) {
    var index = config.fields.indexOf("Value");
    pcbdata.bom["parsedValues"] = {};
    for (var id in pcbdata.bom.fields) {
      pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
    }
  }
}

function parseValue(val, ref) {
  var inferUnit = (unit, ref) => {
    if (unit) {
      unit = unit.toLowerCase();
      if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
        unit = 'r';
      }
      unit = unit[0];
    } else {
      ref = /^([a-z]+)\d+$/i.exec(ref);
      if (ref) {
        ref = ref[1].toLowerCase();
        if (ref == "c") unit = 'f';
        else if (ref == "l") unit = 'h';
        else if (ref == "r" || ref == "rv") unit = 'r';
        else unit = null;
      }
    }
    return unit;
  };
  val = val.replace(/,/g, "");
  var match = units.valueRegex.exec(val);
  var unit;
  if (match) {
    val = parseFloat(match[1]);
    if (match[2]) {
      val = val * units.getMultiplier(match[2]);
    }
    unit = inferUnit(match[3], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[4],
    }
  }
  match = units.valueAltRegex.exec(val);
  if (match && (match[1] || match[4])) {
    val = parseFloat(match[1] + "." + match[4]);
    if (match[3]) {
      val = val * units.getMultiplier(match[3]);
    }
    unit = inferUnit(match[2], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[5],
    }
  }
  return null;
}

function valueCompare(a, b, stra, strb) {
  if (a === null && b === null) {
    // Failed to parse both values, compare them as strings.
    if (stra != strb) return stra > strb ? 1 : -1;
    else return 0;
  } else if (a === null) {
    return 1;
  } else if (b === null) {
    return -1;
  } else {
    if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
    else if (a.val != b.val) return a.val > b.val ? 1 : -1;
    else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
    else return 0;
  }
}

function validateSaveImgDimension(element) {
  var valid = false;
  var intValue = 0;
  if (/^[1-9]\d*$/.test(element.value)) {
    intValue = parseInt(element.value);
    if (intValue <= 16000) {
      valid = true;
    }
  }
  if (valid) {
    element.classList.remove("invalid");
  } else {
    element.classList.add("invalid");
  }
  return intValue;
}

function saveImage(layer) {
  var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  var bgcolor = null;
  if (!document.getElementById("render-save-transparent").checked) {
    var style = getComputedStyle(topmostdiv);
    bgcolor = style.getPropertyValue("background-color");
  }
  if (!width || !height) return;

  // Prepare image
  var canvas = document.createElement("canvas");
  var layerdict = {
    transform: {
      x: 0,
      y: 0,
      s: 1,
      panx: 0,
      pany: 0,
      zoom: 1,
    },
    bg: canvas,
    fab: canvas,
    silk: canvas,
    highlight: canvas,
    layer: layer,
  }
  // Do the rendering
  recalcLayerScale(layerdict, width, height);
  prepareLayer(layerdict);
  clearCanvas(canvas, bgcolor);
  drawBackground(layerdict, false);
  drawHighlightsOnLayer(layerdict, false);

  // Save image
  var imgdata = canvas.toDataURL("image/png");

  var filename = pcbdata.metadata.title;
  if (pcbdata.metadata.revision) {
    filename += `.${pcbdata.metadata.revision}`;
  }
  filename += `.${layer}.png`;
  saveFile(filename, dataURLtoBlob(imgdata));
}

function saveSettings() {
  var data = {
    type: "InteractiveHtmlBom settings",
    version: 1,
    pcbmetadata: pcbdata.metadata,
    settings: settings,
  }
  var blob = new Blob([JSON.stringify(data, null, 4)], {
    type: "application/json"
  });
  saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}

function loadSettings() {
  var input = document.createElement("input");
  input.type = "file";
  input.accept = ".settings.json";
  input.onchange = function(e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = readerEvent => {
      var content = readerEvent.target.result;
      var newSettings;
      try {
        newSettings = JSON.parse(content);
      } catch (e) {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      if (newSettings.type != "InteractiveHtmlBom settings") {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
      if (metadataMatches) {
        for (var k in pcbdata.metadata) {
          if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
            metadataMatches = false;
          }
        }
      }
      if (!metadataMatches) {
        var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
        var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
        if (!confirm(
            `Settins file metadata does not match current metadata.\n\n` +
            `Page metadata:\n${currentMetadata}\n\n` +
            `Settings file metadata:\n${fileMetadata}\n\n` +
            `Press OK if you would like to import settings anyway.`)) {
          return;
        }
      }
      overwriteSettings(newSettings.settings);
    }
    reader.readAsText(file, 'UTF-8');
  }
  input.click();
}

function overwriteSettings(newSettings) {
  initDone = false;
  Object.assign(settings, newSettings);
  writeStorage("bomlayout", settings.bomlayout);
  writeStorage("bommode", settings.bommode);
  writeStorage("canvaslayout", settings.canvaslayout);
  writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  for (var checkbox of settings.checkboxes) {
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  }
  writeStorage("markWhenChecked", settings.markWhenChecked);
  padsVisible(settings.renderPads);
  document.getElementById("padsCheckbox").checked = settings.renderPads;
  fabricationVisible(settings.renderFabrication);
  document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  silkscreenVisible(settings.renderSilkscreen);
  document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  referencesVisible(settings.renderReferences);
  document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  valuesVisible(settings.renderValues);
  document.getElementById("valuesCheckbox").checked = settings.renderValues;
  tracksVisible(settings.renderTracks);
  document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  zonesVisible(settings.renderZones);
  document.getElementById("zonesCheckbox").checked = settings.renderZones;
  dnpOutline(settings.renderDnpOutline);
  document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  setRedrawOnDrag(settings.redrawOnDrag);
  document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  setDarkMode(settings.darkMode);
  document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  setHighlightPin1(settings.highlightpin1);
  document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
  showFootprints(settings.show_footprints);
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  initDone = true;
  prepCheckboxes();
  changeBomLayout(settings.bomlayout);
}

function saveFile(filename, blob) {
  var link = document.createElement("a");
  var objurl = URL.createObjectURL(blob);
  link.download = filename;
  link.href = objurl;
  link.click();
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime
  });
}

var settings = {
  canvaslayout: "default",
  bomlayout: "default",
  bommode: "grouped",
  checkboxes: [],
  checkboxStoredRefs: {},
  darkMode: false,
  highlightpin1: false,
  redrawOnDrag: true,
  boardRotation: 0,
  renderPads: true,
  renderReferences: true,
  renderValues: true,
  renderSilkscreen: true,
  renderFabrication: true,
  renderDnpOutline: false,
  renderTracks: true,
  renderZones: true,
  columnOrder: [],
  hiddenColumns: [],
}

function initDefaults() {
  settings.bomlayout = readStorage("bomlayout");
  if (settings.bomlayout === null) {
    settings.bomlayout = config.bom_view;
  }
  if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
    settings.bomlayout = config.bom_view;
  }
  settings.bommode = readStorage("bommode");
  if (settings.bommode === null) {
    settings.bommode = "grouped";
  }
  if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
    settings.bommode = "grouped";
  }
  settings.canvaslayout = readStorage("canvaslayout");
  if (settings.canvaslayout === null) {
    settings.canvaslayout = config.layer_view;
  }
  var bomCheckboxes = readStorage("bomCheckboxes");
  if (bomCheckboxes === null) {
    bomCheckboxes = config.checkboxes;
  }
  settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  document.getElementById("bomCheckboxes").value = bomCheckboxes;

  settings.markWhenChecked = readStorage("markWhenChecked") || "";
  populateMarkWhenCheckedOptions();

  function initBooleanSetting(storageString, def, elementId, func) {
    var b = readStorage(storageString);
    if (b === null) {
      b = def;
    } else {
      b = (b == "true");
    }
    document.getElementById(elementId).checked = b;
    func(b);
  }

  initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  if ("tracks" in pcbdata) {
    initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
    initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  } else {
    document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
    tracksVisible(false);
    zonesVisible(false);
  }
  initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
  initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);

  var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
  var hcols = JSON.parse(readStorage("hiddenColumns"));
  if (hcols === null) {
    hcols = [];
  }
  settings.hiddenColumns = hcols.filter(e => fields.includes(e));

  var cord = JSON.parse(readStorage("columnOrder"));
  if (cord === null) {
    cord = fields;
  } else {
    cord = cord.filter(e => fields.includes(e));
    if (cord.length != fields.length)
      cord = fields;
  }
  settings.columnOrder = cord;

  settings.boardRotation = readStorage("boardRotation");
  if (settings.boardRotation === null) {
    settings.boardRotation = config.board_rotation * 5;
  } else {
    settings.boardRotation = parseInt(settings.boardRotation);
  }
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
}

// Helper classes for user js callbacks.

const IBOM_EVENT_TYPES = {
  ALL: "all",
  HIGHLIGHT_EVENT: "highlightEvent",
  CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
  BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}

const EventHandler = {
  callbacks: {},
  init: function() {
    for (eventType of Object.values(IBOM_EVENT_TYPES))
      this.callbacks[eventType] = [];
  },
  registerCallback: function(eventType, callback) {
    this.callbacks[eventType].push(callback);
  },
  emitEvent: function(eventType, eventArgs) {
    event = {
      eventType: eventType,
      args: eventArgs,
    }
    var callback;
    for (callback of this.callbacks[eventType])
      callback(event);
    for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
      callback(event);
  }
}
EventHandler.init();

///////////////////////////////////////////////

///////////////////////////////////////////////
/* PCB rendering code */

var emptyContext2d = document.createElement("canvas").getContext("2d");

function deg2rad(deg) {
  return deg * Math.PI / 180;
}

function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  var point = [
    linepoint[0] * text.width + offsetx,
    linepoint[1] * text.height + offsety
  ];
  // This approximates pcbnew behavior with how text tilts depending on horizontal justification
  point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
  return point;
}

function drawText(ctx, text, color) {
  if ("ref" in text && !settings.renderReferences) return;
  if ("val" in text && !settings.renderValues) return;
  ctx.save();
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  ctx.lineWidth = text.thickness;
  if ("svgpath" in text) {
    ctx.stroke(new Path2D(text.svgpath));
    ctx.restore();
    return;
  }
  if ("polygons" in text) {
    ctx.fill(getPolygonsPath(text));
    ctx.restore();
    return;
  }
  ctx.translate(...text.pos);
  ctx.translate(text.thickness * 0.5, 0);
  var angle = -text.angle;
  if (text.attr.includes("mirrored")) {
    ctx.scale(-1, 1);
    angle = -angle;
  }
  var tilt = 0;
  if (text.attr.includes("italic")) {
    tilt = 0.125;
  }
  var interline = text.height * 1.5 + text.thickness;
  var txt = text.text.split("\n");
  // KiCad ignores last empty line.
  if (txt[txt.length - 1] == '') txt.pop();
  ctx.rotate(deg2rad(angle));
  var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
  offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
  for (var i in txt) {
    var lineWidth = text.thickness + interline / 2 * tilt;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        lineWidth += fourSpaces - lineWidth % fourSpaces;
      } else {
        if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
        }
        lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
      }
    }
    var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
    var inOverbar = false;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        offsetx += fourSpaces - offsetx % fourSpaces;
        continue;
      } else if (txt[i][j] == '~') {
        j++;
        if (j == txt[i].length)
          break;
        if (txt[i][j] != '~') {
          inOverbar = !inOverbar;
        }
      }
      var glyph = pcbdata.font_data[txt[i][j]];
      if (inOverbar) {
        var overbarStart = [offsetx, -text.height * 1.4 + offsety];
        var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];

        if (!lastHadOverbar) {
          overbarStart[0] += text.height * 1.4 * tilt;
          lastHadOverbar = true;
        }
        ctx.beginPath();
        ctx.moveTo(...overbarStart);
        ctx.lineTo(...overbarEnd);
        ctx.stroke();
      } else {
        lastHadOverbar = false;
      }
      for (var line of glyph.l) {
        ctx.beginPath();
        ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
        for (var k = 1; k < line.length; k++) {
          ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
        }
        ctx.stroke();
      }
      offsetx += glyph.w * text.width;
    }
    offsety += interline;
  }
  ctx.restore();
}

function drawedge(ctx, scalefactor, edge, color) {
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  if ("svgpath" in edge) {
    ctx.stroke(new Path2D(edge.svgpath));
  } else {
    ctx.beginPath();
    if (edge.type == "segment") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(...edge.end);
    }
    if (edge.type == "rect") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(edge.start[0], edge.end[1]);
      ctx.lineTo(...edge.end);
      ctx.lineTo(edge.end[0], edge.start[1]);
      ctx.lineTo(...edge.start);
    }
    if (edge.type == "arc") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        deg2rad(edge.startangle),
        deg2rad(edge.endangle));
    }
    if (edge.type == "circle") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        0, 2 * Math.PI);
      ctx.closePath();
    }
    if (edge.type == "curve") {
      ctx.moveTo(...edge.start);
      ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
    }
    if("filled" in edge && edge.filled)
      ctx.fill();
    else
      ctx.stroke();
  }
}

function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  var path = new Path2D();
  var width = size[0];
  var height = size[1];
  var x = width * -0.5;
  var y = height * -0.5;
  var chamfOffset = Math.min(width, height) * chamfratio;
  path.moveTo(x, 0);
  if (chamfpos & 4) {
    path.lineTo(x, y + height - chamfOffset);
    path.lineTo(x + chamfOffset, y + height);
    path.lineTo(0, y + height);
  } else {
    path.arcTo(x, y + height, x + width, y + height, radius);
  }
  if (chamfpos & 8) {
    path.lineTo(x + width - chamfOffset, y + height);
    path.lineTo(x + width, y + height - chamfOffset);
    path.lineTo(x + width, 0);
  } else {
    path.arcTo(x + width, y + height, x + width, y, radius);
  }
  if (chamfpos & 2) {
    path.lineTo(x + width, y + chamfOffset);
    path.lineTo(x + width - chamfOffset, y);
    path.lineTo(0, y);
  } else {
    path.arcTo(x + width, y, x, y, radius);
  }
  if (chamfpos & 1) {
    path.lineTo(x + chamfOffset, y);
    path.lineTo(x, y + chamfOffset);
    path.lineTo(x, 0);
  } else {
    path.arcTo(x, y, x, y + height, radius);
  }
  path.closePath();
  return path;
}

function getOblongPath(size) {
  return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}

function getPolygonsPath(shape) {
  if (shape.path2d) {
    return shape.path2d;
  }
  if ("svgpath" in shape) {
    shape.path2d = new Path2D(shape.svgpath);
  } else {
    var path = new Path2D();
    for (var polygon of shape.polygons) {
      path.moveTo(...polygon[0]);
      for (var i = 1; i < polygon.length; i++) {
        path.lineTo(...polygon[i]);
      }
      path.closePath();
    }
    shape.path2d = path;
  }
  return shape.path2d;
}

function drawPolygonShape(ctx, scalefactor, shape, color) {
  ctx.save();
  if (!("svgpath" in shape)) {
    ctx.translate(...shape.pos);
    ctx.rotate(deg2rad(-shape.angle));
  }
  if("filled" in shape && !shape.filled) {
    ctx.strokeStyle = color;
    ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
    ctx.lineCap = "round";
    ctx.lineJoin = "round";
    ctx.stroke(getPolygonsPath(shape));
  } else {
    ctx.fillStyle = color;
    ctx.fill(getPolygonsPath(shape));
  }
  ctx.restore();
}

function drawDrawing(ctx, scalefactor, drawing, color) {
  if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
    drawedge(ctx, scalefactor, drawing, color);
  } else if (drawing.type == "polygon") {
    drawPolygonShape(ctx, scalefactor, drawing, color);
  } else {
    drawText(ctx, drawing, color);
  }
}

function getCirclePath(radius) {
  var path = new Path2D();
  path.arc(0, 0, radius, 0, 2 * Math.PI);
  path.closePath();
  return path;
}

function getCachedPadPath(pad) {
  if (!pad.path2d) {
    // if path2d is not set, build one and cache it on pad object
    if (pad.shape == "rect") {
      pad.path2d = new Path2D();
      pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
    } else if (pad.shape == "oval") {
      pad.path2d = getOblongPath(pad.size);
    } else if (pad.shape == "circle") {
      pad.path2d = getCirclePath(pad.size[0] / 2);
    } else if (pad.shape == "roundrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
    } else if (pad.shape == "chamfrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
    } else if (pad.shape == "custom") {
      pad.path2d = getPolygonsPath(pad);
    }
  }
  return pad.path2d;
}

function drawPad(ctx, pad, color, outline) {
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  if (pad.offset) {
    ctx.translate(...pad.offset);
  }
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  var path = getCachedPadPath(pad);
  if (outline) {
    ctx.stroke(path);
  } else {
    ctx.fill(path);
  }
  ctx.restore();
}

function drawPadHole(ctx, pad, padHoleColor) {
  if (pad.type != "th") return;
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  ctx.fillStyle = padHoleColor;
  if (pad.drillshape == "oblong") {
    ctx.fill(getOblongPath(pad.drillsize));
  } else {
    ctx.fill(getCirclePath(pad.drillsize[0] / 2));
  }
  ctx.restore();
}

function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
  if (highlight) {
    // draw bounding box
    if (footprint.layer == layer) {
      ctx.save();
      ctx.globalAlpha = 0.2;
      ctx.translate(...footprint.bbox.pos);
      ctx.rotate(deg2rad(-footprint.bbox.angle));
      ctx.translate(...footprint.bbox.relpos);
      ctx.fillStyle = colors.pad;
      ctx.fillRect(0, 0, ...footprint.bbox.size);
      ctx.globalAlpha = 1;
      ctx.strokeStyle = colors.pad;
      ctx.strokeRect(0, 0, ...footprint.bbox.size);
      ctx.restore();
    }
  }
  // draw drawings
  for (var drawing of footprint.drawings) {
    if (drawing.layer == layer) {
      drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
    }
  }
  // draw pads
  if (settings.renderPads) {
    for (var pad of footprint.pads) {
      if (pad.layers.includes(layer)) {
        drawPad(ctx, pad, colors.pad, outline);
        if (pad.pin1 && settings.highlightpin1) {
          drawPad(ctx, pad, colors.outline, true);
        }
      }
    }
    for (var pad of footprint.pads) {
      drawPadHole(ctx, pad, colors.padHole);
    }
  }
}

function drawEdgeCuts(canvas, scalefactor) {
  var ctx = canvas.getContext("2d");
  var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  for (var edge of pcbdata.edges) {
    drawDrawing(ctx, scalefactor, edge, edgecolor);
  }
}

function drawFootprints(canvas, layer, scalefactor, highlight) {
  var ctx = canvas.getContext("2d");
  ctx.lineWidth = 3 / scalefactor;
  var style = getComputedStyle(topmostdiv);

  var colors = {
    pad: style.getPropertyValue('--pad-color'),
    padHole: style.getPropertyValue('--pad-hole-color'),
    outline: style.getPropertyValue('--pin1-outline-color'),
  }

  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var mod = pcbdata.footprints[i];
    var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
    var h = highlightedFootprints.includes(i);
    var d = markedFootprints.has(i);
    if (highlight) {
      if(h && d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-both');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
      } else if (h) {
        colors.pad = style.getPropertyValue('--pad-color-highlight');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
      } else if (d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
      }
    }
    if( h || d || !highlight) {
      drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
    }
  }
}

function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  var ctx = canvas.getContext("2d");
  for (var d of pcbdata.drawings[layername][layer]) {
    if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
      drawedge(ctx, scalefactor, d, edgeColor);
    } else if (d.type == "polygon") {
      drawPolygonShape(ctx, scalefactor, d, polygonColor);
    } else {
      drawText(ctx, d, textColor);
    }
  }
}

function drawTracks(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  for (var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    ctx.lineWidth = track.width;
    ctx.beginPath();
    if ('radius' in track) {
      ctx.arc(
        ...track.center,
        track.radius,
        deg2rad(track.startangle),
        deg2rad(track.endangle));
    } else {
      ctx.moveTo(...track.start);
      ctx.lineTo(...track.end);
    }
    ctx.stroke();
  }
}

function drawZones(canvas, layer, color, highlight) {
  ctx = canvas.getContext("2d");
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineJoin = "round";
  for (var zone of pcbdata.zones[layer]) {
    if (!zone.path2d) {
      zone.path2d = getPolygonsPath(zone);
    }
    if (highlight && highlightedNet != zone.net) continue;
    ctx.fill(zone.path2d);
    if (zone.width > 0) {
      ctx.lineWidth = zone.width;
      ctx.stroke(zone.path2d);
    }
  }
}

function clearCanvas(canvas, color = null) {
  var ctx = canvas.getContext("2d");
  ctx.save();
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  if (color) {
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  } else {
    if (!window.matchMedia("print").matches)
      ctx.clearRect(0, 0, canvas.width, canvas.height);
  }
  ctx.restore();
}

function drawNets(canvas, layer, highlight) {
  var style = getComputedStyle(topmostdiv);
  if (settings.renderTracks) {
    var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
    drawTracks(canvas, layer, trackColor, highlight);
  }
  if (settings.renderZones) {
    var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
    drawZones(canvas, layer, zoneColor, highlight);
  }
  if (highlight && settings.renderPads) {
    var padColor = style.getPropertyValue('--pad-color-highlight');
    var padHoleColor = style.getPropertyValue('--pad-hole-color');
    var ctx = canvas.getContext("2d");
    for (var footprint of pcbdata.footprints) {
      // draw pads
      var padDrawn = false;
      for (var pad of footprint.pads) {
        if (highlightedNet != pad.net) continue;
        if (pad.layers.includes(layer)) {
          drawPad(ctx, pad, padColor, false);
          padDrawn = true;
        }
      }
      if (padDrawn) {
        // redraw all pad holes because some pads may overlap
        for (var pad of footprint.pads) {
          drawPadHole(ctx, pad, padHoleColor);
        }
      }
    }
  }
}

function drawHighlightsOnLayer(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.highlight);
  }
  if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
    drawFootprints(canvasdict.highlight, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom, true);
  }
  if (highlightedNet !== null) {
    drawNets(canvasdict.highlight, canvasdict.layer, true);
  }
}

function drawHighlights() {
  drawHighlightsOnLayer(allcanvas.front);
  drawHighlightsOnLayer(allcanvas.back);
}

function drawBackground(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.bg);
    clearCanvas(canvasdict.fab);
    clearCanvas(canvasdict.silk);
  }

  drawNets(canvasdict.bg, canvasdict.layer, false);
  drawFootprints(canvasdict.bg, canvasdict.layer,
    canvasdict.transform.s * canvasdict.transform.zoom, false);

  drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);

  var style = getComputedStyle(topmostdiv);
  var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  var textColor = style.getPropertyValue('--silkscreen-text-color');
  if (settings.renderSilkscreen) {
    drawBgLayer(
      "silkscreen", canvasdict.silk, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
  edgeColor = style.getPropertyValue('--fabrication-edge-color');
  polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  textColor = style.getPropertyValue('--fabrication-text-color');
  if (settings.renderFabrication) {
    drawBgLayer(
      "fabrication", canvasdict.fab, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
}

function prepareCanvas(canvas, flip, transform) {
  var ctx = canvas.getContext("2d");
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  ctx.scale(transform.zoom, transform.zoom);
  ctx.translate(transform.panx, transform.pany);
  if (flip) {
    ctx.scale(-1, 1);
  }
  ctx.translate(transform.x, transform.y);
  ctx.rotate(deg2rad(settings.boardRotation));
  ctx.scale(transform.s, transform.s);
}

function prepareLayer(canvasdict) {
  var flip = (canvasdict.layer == "B");
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  }
}

function rotateVector(v, angle) {
  angle = deg2rad(angle);
  return [
    v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
    v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  ];
}

function applyRotation(bbox) {
  var corners = [
    [bbox.minx, bbox.miny],
    [bbox.minx, bbox.maxy],
    [bbox.maxx, bbox.miny],
    [bbox.maxx, bbox.maxy],
  ];
  corners = corners.map((v) => rotateVector(v, settings.boardRotation));
  return {
    minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
    miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
    maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
    maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  }
}

function recalcLayerScale(layerdict, width, height) {
  var bbox = applyRotation(pcbdata.edges_bbox);
  var scalefactor = 0.98 * Math.min(
    width / (bbox.maxx - bbox.minx),
    height / (bbox.maxy - bbox.miny)
  );
  if (scalefactor < 0.1) {
    scalefactor = 1;
  }
  layerdict.transform.s = scalefactor;
  var flip = (layerdict.layer == "B");
  if (flip) {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  } else {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  }
  layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    canvas = layerdict[c];
    canvas.width = width;
    canvas.height = height;
    canvas.style.width = (width / devicePixelRatio) + "px";
    canvas.style.height = (height / devicePixelRatio) + "px";
  }
}

function redrawCanvas(layerdict) {
  prepareLayer(layerdict);
  drawBackground(layerdict);
  drawHighlightsOnLayer(layerdict);
}

function resizeCanvas(layerdict) {
  var canvasdivid = {
    "F": "frontcanvas",
    "B": "backcanvas"
  } [layerdict.layer];
  var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  recalcLayerScale(layerdict, width, height);
  redrawCanvas(layerdict);
}

function resizeAll() {
  resizeCanvas(allcanvas.front);
  resizeCanvas(allcanvas.back);
}

function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  var A = x - x1;
  var B = y - y1;
  var C = x2 - x1;
  var D = y2 - y1;

  var dot = A * C + B * D;
  var len_sq = C * C + D * D;
  var dx, dy;
  if (len_sq == 0) {
    // start and end of the segment coincide
    dx = x - x1;
    dy = y - y1;
  } else {
    var param = dot / len_sq;
    var xx, yy;
    if (param < 0) {
      xx = x1;
      yy = y1;
    } else if (param > 1) {
      xx = x2;
      yy = y2;
    } else {
      xx = x1 + param * C;
      yy = y1 + param * D;
    }
    dx = x - xx;
    dy = y - yy;
  }
  return dx * dx + dy * dy <= d * d;
}

function modulo(n, mod) {
  return ((n % mod) + mod) % mod;
}

function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
  var dx = x - xc;
  var dy = y - yc;
  var r_sq = dx * dx + dy * dy;
  var rmin = Math.max(0, radius - d);
  var rmax = radius + d;

  if (r_sq < rmin * rmin || r_sq > rmax * rmax)
    return false;

  var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
  var dx1 = xc + radius * Math.cos(angle1) - x;
  var dy1 = yc + radius * Math.sin(angle1) - y;
  if (dx1 * dx1 + dy1 * dy1 <= d * d)
    return true;

  var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
  var dx2 = xc + radius * Math.cos(angle2) - x;
  var dy2 = yc + radius * Math.sin(angle2) - y;
  if (dx2 * dx2 + dy2 * dy2 <= d * d)
    return true;

  var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
  if (angle1 > angle2)
    return (angle >= angle2 || angle <= angle1);
  else
    return (angle >= angle1 && angle <= angle2);
}

function pointWithinPad(x, y, pad) {
  var v = [x - pad.pos[0], y - pad.pos[1]];
  v = rotateVector(v, pad.angle);
  if (pad.offset) {
    v[0] -= pad.offset[0];
    v[1] -= pad.offset[1];
  }
  return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}

function netHitScan(layer, x, y) {
  // Check track segments
  if (settings.renderTracks && pcbdata.tracks) {
    for (var track of pcbdata.tracks[layer]) {
      if ('radius' in track) {
        if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
          return track.net;
        }
      } else {
        if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
          return track.net;
        }
      }
    }
  }
  // Check pads
  if (settings.renderPads) {
    for (var footprint of pcbdata.footprints) {
      for (var pad of footprint.pads) {
        if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
          return pad.net;
        }
      }
    }
  }
  return null;
}

function pointWithinFootprintBbox(x, y, bbox) {
  var v = [x - bbox.pos[0], y - bbox.pos[1]];
  v = rotateVector(v, bbox.angle);
  return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
    bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}

function bboxHitScan(layer, x, y) {
  var result = [];
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var footprint = pcbdata.footprints[i];
    if (footprint.layer == layer) {
      if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
        result.push(i);
      }
    }
  }
  return result;
}

function handlePointerDown(e, layerdict) {
  if (e.button != 0 && e.button != 1) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  layerdict.pointerStates[e.pointerId] = {
    distanceTravelled: 0,
    lastX: e.offsetX,
    lastY: e.offsetY,
    downTime: Date.now(),
  };
}

function handleMouseClick(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var x = e.offsetX;
  var y = e.offsetY;
  var t = layerdict.transform;
  if (layerdict.layer == "B") {
    x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  } else {
    x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  }
  y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  var v = rotateVector([x, y], -settings.boardRotation);
  if ("nets" in pcbdata) {
    var net = netHitScan(layerdict.layer, ...v);
    if (net !== highlightedNet) {
      netClicked(net);
    }
  }
  if (highlightedNet === null) {
    var footprints = bboxHitScan(layerdict.layer, ...v);
    if (footprints.length > 0) {
      footprintsClicked(footprints);
    }
  }
}

function handlePointerLeave(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();

  if (!settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }

  delete layerdict.pointerStates[e.pointerId];
}

function resetTransform(layerdict) {
  layerdict.transform.panx = 0;
  layerdict.transform.pany = 0;
  layerdict.transform.zoom = 1;
  redrawCanvas(layerdict);
}

function handlePointerUp(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  e.preventDefault();
  e.stopPropagation();

  if (e.button == 2) {
    // Reset pan and zoom on right click.
    resetTransform(layerdict);
    layerdict.anotherPointerTapped = false;
    return;
  }

  // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  var ptr = layerdict.pointerStates[e.pointerId];
  ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);

  if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
    if (Object.keys(layerdict.pointerStates).length == 1) {
      if (layerdict.anotherPointerTapped) {
        // This is the second pointer coming off of a two-finger tap
        resetTransform(layerdict);
      } else {
        // This is just a regular tap
        handleMouseClick(e, layerdict);
      }
      layerdict.anotherPointerTapped = false;
    } else {
      // This is the first finger coming off of what could become a two-finger tap
      layerdict.anotherPointerTapped = true;
    }
  } else {
    if (!settings.redrawOnDrag) {
      redrawCanvas(layerdict);
    }
    layerdict.anotherPointerTapped = false;
  }

  delete layerdict.pointerStates[e.pointerId];
}

function handlePointerMove(e, layerdict) {
  if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var thisPtr = layerdict.pointerStates[e.pointerId];

  var dx = e.offsetX - thisPtr.lastX;
  var dy = e.offsetY - thisPtr.lastY;

  // If this number is low on pointer up, we count the action as a click
  thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);

  if (Object.keys(layerdict.pointerStates).length == 1) {
    // This is a simple drag
    layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
    layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  } else if (Object.keys(layerdict.pointerStates).length == 2) {
    var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];

    var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
    var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));

    var scaleFactor = newDist / oldDist;

    if (scaleFactor != NaN) {
      layerdict.transform.zoom *= scaleFactor;

      var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
      layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
      layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
    }
  }

  thisPtr.lastX = e.offsetX;
  thisPtr.lastY = e.offsetY;

  if (settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }
}

function handleMouseWheel(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();
  var t = layerdict.transform;
  var wheeldelta = e.deltaY;
  if (e.deltaMode == 1) {
    // FF only, scroll by lines
    wheeldelta *= 30;
  } else if (e.deltaMode == 2) {
    wheeldelta *= 300;
  }
  var m = Math.pow(1.1, -wheeldelta / 40);
  // Limit amount of zoom per tick.
  if (m > 2) {
    m = 2;
  } else if (m < 0.5) {
    m = 0.5;
  }
  t.zoom *= m;
  var zoomd = (1 - m) / t.zoom;
  t.panx += devicePixelRatio * e.offsetX * zoomd;
  t.pany += devicePixelRatio * e.offsetY * zoomd;
  redrawCanvas(layerdict);
}

function addMouseHandlers(div, layerdict) {
  div.addEventListener("pointerdown", function(e) {
    handlePointerDown(e, layerdict);
  });
  div.addEventListener("pointermove", function(e) {
    handlePointerMove(e, layerdict);
  });
  div.addEventListener("pointerup", function(e) {
    handlePointerUp(e, layerdict);
  });
  var pointerleave = function(e) {
    handlePointerLeave(e, layerdict);
  }
  div.addEventListener("pointercancel", pointerleave);
  div.addEventListener("pointerleave", pointerleave);
  div.addEventListener("pointerout", pointerleave);

  div.onwheel = function(e) {
    handleMouseWheel(e, layerdict);
  }
  for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
    element.addEventListener("contextmenu", function(e) {
      e.preventDefault();
    }, false);
  }
}

function setRedrawOnDrag(value) {
  settings.redrawOnDrag = value;
  writeStorage("redrawOnDrag", value);
}

function setBoardRotation(value) {
  settings.boardRotation = value * 5;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  resizeAll();
}

function initRender() {
  allcanvas = {
    front: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("F_bg"),
      fab: document.getElementById("F_fab"),
      silk: document.getElementById("F_slk"),
      highlight: document.getElementById("F_hl"),
      layer: "F",
    },
    back: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("B_bg"),
      fab: document.getElementById("B_fab"),
      silk: document.getElementById("B_slk"),
      highlight: document.getElementById("B_hl"),
      layer: "B",
    }
  };
  addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/*
 * Table reordering via Drag'n'Drop
 * Inspired by: https://htmldom.dev/drag-and-drop-table-column
 */

function setBomHandlers() {

  const bom = document.getElementById('bomtable');

  let dragName;
  let placeHolderElements;
  let draggingElement;
  let forcePopulation;
  let xOffset;
  let yOffset;
  let wasDragged;

  const mouseUpHandler = function(e) {
    // Delete dragging element
    draggingElement.remove();

    // Make BOM selectable again
    bom.style.removeProperty("userSelect");

    // Remove listeners
    document.removeEventListener('mousemove', mouseMoveHandler);
    document.removeEventListener('mouseup', mouseUpHandler);

    if (wasDragged) {
      // Redraw whole BOM
      populateBomTable();
    }
  }

  const mouseMoveHandler = function(e) {
    // Notice the dragging
    wasDragged = true;

    // Make the dragged element visible
    draggingElement.style.removeProperty("display");

    // Set elements position to mouse position
    draggingElement.style.left = `${e.screenX - xOffset}px`;
    draggingElement.style.top = `${e.screenY - yOffset}px`;

    // Forced redrawing of BOM table
    if (forcePopulation) {
      forcePopulation = false;
      // Copy array
      phe = Array.from(placeHolderElements);
      // populate BOM table again
      populateBomHeader(dragName, phe);
      populateBomBody(dragName, phe);
    }

    // Set up array of hidden columns
    var hiddenColumns = Array.from(settings.hiddenColumns);
    // In the ungrouped mode, quantity don't exist
    if (settings.bommode === "ungrouped")
      hiddenColumns.push("Quantity");
    // If no checkbox fields can be found, we consider them hidden
    if (settings.checkboxes.length == 0)
      hiddenColumns.push("checkboxes");

    // Get table headers and group them into checkboxes, extrafields and normal headers
    const bh = document.getElementById("bomhead");
    headers = Array.from(bh.querySelectorAll("th"))
    headers.shift() // numCol is not part of the columnOrder
    headerGroups = []
    lastCompoundClass = null;
    for (i = 0; i < settings.columnOrder.length; i++) {
      cElem = settings.columnOrder[i];
      if (hiddenColumns.includes(cElem)) {
        // Hidden columns appear as a dummy element
        headerGroups.push([]);
        continue;
      }
      elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
      if (elem.classList.contains("bom-checkbox")) {
        if (lastCompoundClass === "bom-checkbox") {
          cbGroup = headerGroups.pop();
          cbGroup.push(elem);
          headerGroups.push(cbGroup);
        } else {
          lastCompoundClass = "bom-checkbox";
          headerGroups.push([elem])
        }
      } else {
        headerGroups.push([elem])
      }
    }

    // Copy settings.columnOrder
    var columns = Array.from(settings.columnOrder)

    // Set up array with indices of hidden columns
    var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
    var dragIndex = columns.indexOf(dragName);
    var swapIndex = dragIndex;
    var swapDone = false;

    // Check if the current dragged element is swapable with the left or right element
    if (dragIndex > 0) {
      // Get left headers boundingbox
      swapIndex = dragIndex - 1;
      while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
        swapIndex--;
      if (!hiddenIndices.includes(swapIndex)) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }
    if ((!swapDone) && dragIndex < headerGroups.length - 1) {
      // Get right headers boundingbox
      swapIndex = dragIndex + 1;
      while (hiddenIndices.includes(swapIndex))
        swapIndex++;
      if (swapIndex < headerGroups.length) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }

    // Write back change to storage
    if (swapDone) {
      settings.columnOrder = columns
      writeStorage("columnOrder", JSON.stringify(columns));
    }

  }

  const mouseDownHandler = function(e) {
    var target = e.target;
    if (target.tagName.toLowerCase() != "td")
      target = target.parentElement;

    // Used to check if a dragging has ever happened
    wasDragged = false;

    // Create new element which will be displayed as the dragged column
    draggingElement = document.createElement("div")
    draggingElement.classList.add("dragging");
    draggingElement.style.display = "none";
    draggingElement.style.position = "absolute";
    draggingElement.style.overflow = "hidden";

    // Get bomhead and bombody elements
    const bh = document.getElementById("bomhead");
    const bb = document.getElementById("bombody");

    // Get all compound headers for the current column
    var compoundHeaders;
    if (target.classList.contains("bom-checkbox")) {
      compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
    } else {
      compoundHeaders = [target];
    }

    // Create new table which will display the column
    var newTable = document.createElement("table");
    newTable.classList.add("bom");
    newTable.style.background = "white";
    draggingElement.append(newTable);

    // Create new header element
    var newHeader = document.createElement("thead");
    newTable.append(newHeader);

    // Set up array for storing all placeholder elements
    placeHolderElements = [];

    // Add all compound headers to the new thead element and placeholders
    compoundHeaders.forEach(function(h) {
      clone = cloneElementWithDimensions(h);
      newHeader.append(clone);
      placeHolderElements.push(clone);
    });

    // Create new body element
    var newBody = document.createElement("tbody");
    newTable.append(newBody);

    // Get indices for compound headers
    var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));

    // For each row in the BOM body...
    var rows = bb.querySelectorAll("tr");
    rows.forEach(function(row) {
      // ..get the cells for the compound column
      const tds = row.querySelectorAll("td");
      var copytds = idxs.map(i => tds[i]);
      // Add them to the new element and the placeholders
      var newRow = document.createElement("tr");
      copytds.forEach(function(td) {
        clone = cloneElementWithDimensions(td);
        newRow.append(clone);
        placeHolderElements.push(clone);
      });
      newBody.append(newRow);
    });

    // Compute width for compound header
    var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
    draggingElement.style.width = `${width}px`;

    // Insert the new dragging element and disable selection on BOM
    bom.insertBefore(draggingElement, null);
    bom.style.userSelect = "none";

    // Determine the mouse position offset
    xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
    yOffset = e.screenY - compoundHeaders[0].offsetTop;

    // Get name for the column in settings.columnOrder
    dragName = getColumnOrderName(target);

    // Change text and class for placeholder elements
    placeHolderElements = placeHolderElements.map(function(e) {
      newElem = cloneElementWithDimensions(e);
      newElem.textContent = "";
      newElem.classList.add("placeholder");
      return newElem;
    });

    // On next mouse move, the whole BOM needs to be redrawn to show the placeholders
    forcePopulation = true;

    // Add listeners for move and up on mouse
    document.addEventListener('mousemove', mouseMoveHandler);
    document.addEventListener('mouseup', mouseUpHandler);
  }

  // In netlist mode, there is nothing to reorder
  if (settings.bommode === "netlist")
    return;

  // Add mouseDownHandler to every column except the numCol
  bom.querySelectorAll("th")
    .forEach(function(head) {
      if (!head.classList.contains("numCol")) {
        head.onmousedown = mouseDownHandler;
      }
    });

}

function getBoundingClientRectFromMultiple(elements) {
  var elems = Array.from(elements);

  if (elems.length == 0)
    return null;

  var box = elems.shift()
    .getBoundingClientRect();

  elems.forEach(function(elem) {
    var elembox = elem.getBoundingClientRect();
    box.left = Math.min(elembox.left, box.left);
    box.top = Math.min(elembox.top, box.top);
    box.width += elembox.width;
    box.height = Math.max(elembox.height, box.height);
  });

  return box;
}

function cloneElementWithDimensions(elem) {
  var newElem = elem.cloneNode(true);
  newElem.style.height = window.getComputedStyle(elem).height;
  newElem.style.width = window.getComputedStyle(elem).width;
  return newElem;
}

function getBomTableHeaderIndex(elem) {
  const bh = document.getElementById('bomhead');
  const ths = Array.from(bh.querySelectorAll("th"));
  return ths.indexOf(elem);
}

function getColumnOrderName(elem) {
  var cname = elem.getAttribute("col_name");
  if (cname === "bom-checkbox")
    return "checkboxes";
  else
    return cname;
}

function resizableGrid(tablehead) {
  var cols = tablehead.firstElementChild.children;
  var rowWidth = tablehead.offsetWidth;

  for (var i = 1; i < cols.length; i++) {
    if (cols[i].classList.contains("bom-checkbox"))
      continue;
    cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
  }

  for (var i = 1; i < cols.length - 1; i++) {
    var div = document.createElement('div');
    div.className = "column-width-handle";
    cols[i].appendChild(div);
    setListeners(div);
  }

  function setListeners(div) {
    var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;

    div.addEventListener('mousedown', function(e) {
      e.preventDefault();
      e.stopPropagation();

      curCol = e.target.parentElement;
      nxtCol = curCol.nextElementSibling;
      startX = e.pageX;

      var padding = paddingDiff(curCol);

      rowWidth = curCol.parentElement.offsetWidth;
      curColWidth = curCol.clientWidth - padding;
      nxtColWidth = nxtCol.clientWidth - padding;
    });

    document.addEventListener('mousemove', function(e) {
      if (startX) {
        var diffX = e.pageX - startX;
        diffX = -Math.min(-diffX, curColWidth - 20);
        diffX = Math.min(diffX, nxtColWidth - 20);

        curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
        nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
        console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
      }
    });

    document.addEventListener('mouseup', function(e) {
      curCol = undefined;
      nxtCol = undefined;
      startX = undefined;
      nxtColWidth = undefined;
      curColWidth = undefined
    });
  }

  function paddingDiff(col) {

    if (getStyleVal(col, 'box-sizing') == 'border-box') {
      return 0;
    }

    var padLeft = getStyleVal(col, 'padding-left');
    var padRight = getStyleVal(col, 'padding-right');
    return (parseInt(padLeft) + parseInt(padRight));

  }

  function getStyleVal(elm, css) {
    return (window.getComputedStyle(elm, null).getPropertyValue(css))
  }
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* DOM manipulation and misc code */

var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;

function dbg(html) {
  dbgdiv.innerHTML = html;
}

function redrawIfInitDone() {
  if (initDone) {
    redrawCanvas(allcanvas.front);
    redrawCanvas(allcanvas.back);
  }
}

function padsVisible(value) {
  writeStorage("padsVisible", value);
  settings.renderPads = value;
  redrawIfInitDone();
}

function referencesVisible(value) {
  writeStorage("referencesVisible", value);
  settings.renderReferences = value;
  redrawIfInitDone();
}

function valuesVisible(value) {
  writeStorage("valuesVisible", value);
  settings.renderValues = value;
  redrawIfInitDone();
}

function tracksVisible(value) {
  writeStorage("tracksVisible", value);
  settings.renderTracks = value;
  redrawIfInitDone();
}

function zonesVisible(value) {
  writeStorage("zonesVisible", value);
  settings.renderZones = value;
  redrawIfInitDone();
}

function dnpOutline(value) {
  writeStorage("dnpOutline", value);
  settings.renderDnpOutline = value;
  redrawIfInitDone();
}

function setDarkMode(value) {
  if (value) {
    topmostdiv.classList.add("dark");
  } else {
    topmostdiv.classList.remove("dark");
  }
  writeStorage("darkmode", value);
  settings.darkMode = value;
  redrawIfInitDone();
}

function setShowBOMColumn(field, value) {
  if (field === "references") {
    var rl = document.getElementById("reflookup");
    rl.disabled = !value;
    if (!value) {
      rl.value = "";
      updateRefLookup("");
    }
  }

  var n = settings.hiddenColumns.indexOf(field);
  if (value) {
    if (n != -1) {
      settings.hiddenColumns.splice(n, 1);
    }
  } else {
    if (n == -1) {
      settings.hiddenColumns.push(field);
    }
  }

  writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));

  if (initDone) {
    populateBomTable();
  }

  redrawIfInitDone();
}


function setFullscreen(value) {
  if (value) {
    document.documentElement.requestFullscreen();
  } else {
    document.exitFullscreen();
  }
}

function fabricationVisible(value) {
  writeStorage("fabricationVisible", value);
  settings.renderFabrication = value;
  redrawIfInitDone();
}

function silkscreenVisible(value) {
  writeStorage("silkscreenVisible", value);
  settings.renderSilkscreen = value;
  redrawIfInitDone();
}

function setHighlightPin1(value) {
  writeStorage("highlightpin1", value);
  settings.highlightpin1 = value;
  redrawIfInitDone();
}

function getStoredCheckboxRefs(checkbox) {
  function convert(ref) {
    var intref = parseInt(ref);
    if (isNaN(intref)) {
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        if (pcbdata.footprints[i].ref == ref) {
          return i;
        }
      }
      return -1;
    } else {
      return intref;
    }
  }
  if (!(checkbox in settings.checkboxStoredRefs)) {
    var val = readStorage("checkbox_" + checkbox);
    settings.checkboxStoredRefs[checkbox] = val ? val : "";
  }
  if (!settings.checkboxStoredRefs[checkbox]) {
    return new Set();
  } else {
    return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  }
}

function getCheckboxState(checkbox, references) {
  var storedRefsSet = getStoredCheckboxRefs(checkbox);
  var currentRefsSet = new Set(references.map(r => r[1]));
  // Get difference of current - stored
  var difference = new Set(currentRefsSet);
  for (ref of storedRefsSet) {
    difference.delete(ref);
  }
  if (difference.size == 0) {
    // All the current refs are stored
    return "checked";
  } else if (difference.size == currentRefsSet.size) {
    // None of the current refs are stored
    return "unchecked";
  } else {
    // Some of the refs are stored
    return "indeterminate";
  }
}

function setBomCheckboxState(checkbox, element, references) {
  var state = getCheckboxState(checkbox, references);
  element.checked = (state == "checked");
  element.indeterminate = (state == "indeterminate");
}

function createCheckboxChangeHandler(checkbox, references, row) {
  return function () {
    refsSet = getStoredCheckboxRefs(checkbox);
    var markWhenChecked = settings.markWhenChecked == checkbox;
    eventArgs = {
      checkbox: checkbox,
      refs: references,
    }
    if (this.checked) {
      // checkbox ticked
      for (var ref of references) {
        refsSet.add(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.add("checked");
        for (var ref of references) {
          markedFootprints.add(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'checked';
    } else {
      // checkbox unticked
      for (var ref of references) {
        refsSet.delete(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.remove("checked");
        for (var ref of references) {
          markedFootprints.delete(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'unchecked';
    }
    settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
    updateCheckboxStats(checkbox);
    EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
  }
}

function clearHighlightedFootprints() {
  if (currentHighlightedRowId) {
    document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    currentHighlightedRowId = null;
    highlightedFootprints = [];
    highlightedNet = null;
  }
}

function createRowHighlightHandler(rowid, refs, net) {
  return function () {
    if (currentHighlightedRowId) {
      if (currentHighlightedRowId == rowid) {
        return;
      }
      document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    }
    document.getElementById(rowid).classList.add("highlighted");
    currentHighlightedRowId = rowid;
    highlightedFootprints = refs ? refs.map(r => r[1]) : [];
    highlightedNet = net;
    drawHighlights();
    EventHandler.emitEvent(
      IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
      rowid: rowid,
      refs: refs,
      net: net
    });
  }
}

function entryMatches(entry) {
  if (settings.bommode == "netlist") {
    // entry is just a net name
    return entry.toLowerCase().indexOf(filter) >= 0;
  }
  // check refs
  if (!settings.hiddenColumns.includes("references")) {
    for (var ref of entry) {
      if (ref[0].toLowerCase().indexOf(filter) >= 0) {
        return true;
      }
    }
  }
  // check fields
  for (var i in config.fields) {
    var f = config.fields[i];
    if (!settings.hiddenColumns.includes(f)) {
      for (var ref of entry) {
        if (pcbdata.bom.fields[ref[1]][i].toLowerCase().indexOf(filter) >= 0) {
          return true;
        }
      }
    }
  }
  return false;
}

function findRefInEntry(entry) {
  return entry.filter(r => r[0].toLowerCase() == reflookup);
}

function highlightFilter(s) {
  if (!filter) {
    return s;
  }
  var parts = s.toLowerCase().split(filter);
  if (parts.length == 1) {
    return s;
  }
  var r = "";
  var pos = 0;
  for (var i in parts) {
    if (i > 0) {
      r += '<mark class="highlight">' +
        s.substring(pos, pos + filter.length) +
        '</mark>';
      pos += filter.length;
    }
    r += s.substring(pos, pos + parts[i].length);
    pos += parts[i].length;
  }
  return r;
}

function checkboxSetUnsetAllHandler(checkboxname) {
  return function () {
    var checkboxnum = 0;
    while (checkboxnum < settings.checkboxes.length &&
      settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
      checkboxnum++;
    }
    if (checkboxnum >= settings.checkboxes.length) {
      return;
    }
    var allset = true;
    var checkbox;
    var row;
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      if (!checkbox.checked || checkbox.indeterminate) {
        allset = false;
        break;
      }
    }
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = !allset;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
  }
}

function createColumnHeader(name, cls, comparator, is_checkbox = false) {
  var th = document.createElement("TH");
  th.innerHTML = name;
  th.classList.add(cls);
  if (is_checkbox)
    th.setAttribute("col_name", "bom-checkbox");
  else
    th.setAttribute("col_name", name);
  var span = document.createElement("SPAN");
  span.classList.add("sortmark");
  span.classList.add("none");
  th.appendChild(span);
  var spacer = document.createElement("div");
  spacer.className = "column-spacer";
  th.appendChild(spacer);
  spacer.onclick = function () {
    if (currentSortColumn && th !== currentSortColumn) {
      // Currently sorted by another column
      currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
      currentSortColumn.childNodes[1].classList.add("none");
      currentSortColumn = null;
      currentSortOrder = null;
    }
    if (currentSortColumn && th === currentSortColumn) {
      // Already sorted by this column
      if (currentSortOrder == "asc") {
        // Sort by this column, descending order
        bomSortFunction = function (a, b) {
          return -comparator(a, b);
        }
        currentSortColumn.childNodes[1].classList.remove("asc");
        currentSortColumn.childNodes[1].classList.add("desc");
        currentSortOrder = "desc";
      } else {
        // Unsort
        bomSortFunction = null;
        currentSortColumn.childNodes[1].classList.remove("desc");
        currentSortColumn.childNodes[1].classList.add("none");
        currentSortColumn = null;
        currentSortOrder = null;
      }
    } else {
      // Sort by this column, ascending order
      bomSortFunction = comparator;
      currentSortColumn = th;
      currentSortColumn.childNodes[1].classList.remove("none");
      currentSortColumn.childNodes[1].classList.add("asc");
      currentSortOrder = "asc";
    }
    populateBomBody();
  }
  if (is_checkbox) {
    spacer.onclick = fancyDblClickHandler(
      spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
  }
  return th;
}

function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
  while (bomhead.firstChild) {
    bomhead.removeChild(bomhead.firstChild);
  }
  var tr = document.createElement("TR");
  var th = document.createElement("TH");
  th.classList.add("numCol");

  var vismenu = document.createElement("div");
  vismenu.id = "vismenu";
  vismenu.classList.add("menu");

  var visbutton = document.createElement("div");
  visbutton.classList.add("visbtn");
  visbutton.classList.add("hideonprint");

  var viscontent = document.createElement("div");
  viscontent.classList.add("menu-content");
  viscontent.id = "vismenu-content";

  settings.columnOrder.forEach(column => {
    if (typeof column !== "string")
      return;

    // Skip empty columns
    if (column === "checkboxes" && settings.checkboxes.length == 0)
      return;
    else if (column === "Quantity" && settings.bommode == "ungrouped")
      return;

    var label = document.createElement("label");
    label.classList.add("menu-label");

    var input = document.createElement("input");
    input.classList.add("visibility_checkbox");
    input.type = "checkbox";
    input.onchange = function (e) {
      setShowBOMColumn(column, e.target.checked)
    };
    input.checked = !(settings.hiddenColumns.includes(column));

    label.appendChild(input);
    if (column.length > 0)
      label.append(column[0].toUpperCase() + column.slice(1));

    viscontent.appendChild(label);
  });

  viscontent.childNodes[0].classList.add("menu-label-top");

  vismenu.appendChild(visbutton);
  if (settings.bommode != "netlist") {
    vismenu.appendChild(viscontent);
    th.appendChild(vismenu);
  }
  tr.appendChild(th);

  var checkboxCompareClosure = function (checkbox) {
    return (a, b) => {
      var stateA = getCheckboxState(checkbox, a);
      var stateB = getCheckboxState(checkbox, b);
      if (stateA > stateB) return -1;
      if (stateA < stateB) return 1;
      return 0;
    }
  }
  var stringFieldCompareClosure = function (fieldIndex) {
    return (a, b) => {
      var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
      var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
      if (fa != fb) return fa > fb ? 1 : -1;
      else return 0;
    }
  }
  var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
  var compareRefs = (a, b) => {
    var ra = referenceRegex.exec(a);
    var rb = referenceRegex.exec(b);
    if (ra === null || rb === null) {
      if (a != b) return a > b ? 1 : -1;
      return 0;
    } else {
      if (ra.groups.prefix != rb.groups.prefix) {
        return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
      }
      if (ra.groups.number != rb.groups.number) {
        return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
      }
      return 0;
    }
  }
  if (settings.bommode == "netlist") {
    th = createColumnHeader("Net name", "bom-netname", (a, b) => {
      if (a > b) return -1;
      if (a < b) return 1;
      return 0;
    });
    tr.appendChild(th);
  } else {
    // Filter hidden columns
    var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
    var valueIndex = config.fields.indexOf("Value");
    var footprintIndex = config.fields.indexOf("Footprint");
    columns.forEach((column) => {
      if (column === placeHolderColumn) {
        var n = 1;
        if (column === "checkboxes")
          n = settings.checkboxes.length;
        for (i = 0; i < n; i++) {
          td = placeHolderElements.shift();
          tr.appendChild(td);
        }
        return;
      } else if (column === "checkboxes") {
        for (var checkbox of settings.checkboxes) {
          th = createColumnHeader(
            checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
          tr.appendChild(th);
        }
      } else if (column === "References") {
        tr.appendChild(createColumnHeader("References", "references", (a, b) => {
          var i = 0;
          while (i < a.length && i < b.length) {
            if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
            i++;
          }
          return a.length - b.length;
        }));
      } else if (column === "Value") {
        tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
          var ra = a[0][1], rb = b[0][1];
          return valueCompare(
            pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
            pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
        }));
        return;
      } else if (column === "Footprint") {
        tr.appendChild(createColumnHeader(
          "Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
      } else if (column === "Quantity" && settings.bommode == "grouped") {
        tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
          return a.length - b.length;
        }));
      } else {
        // Other fields
        var i = config.fields.indexOf(column);
        if (i < 0)
          return;
        tr.appendChild(createColumnHeader(
          column, `field${i + 1}`, stringFieldCompareClosure(i)));
      }
    });
  }
  bomhead.appendChild(tr);
}

function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
  while (bom.firstChild) {
    bom.removeChild(bom.firstChild);
  }
  highlightHandlers = [];
  footprintIndexToHandler = {};
  netsToHandler = {};
  currentHighlightedRowId = null;
  var first = true;
  if (settings.bommode == "netlist") {
    bomtable = pcbdata.nets.slice();
  } else {
    switch (settings.canvaslayout) {
      case 'F':
        bomtable = pcbdata.bom.F.slice();
        break;
      case 'FB':
        bomtable = pcbdata.bom.both.slice();
        break;
      case 'B':
        bomtable = pcbdata.bom.B.slice();
        break;
    }
    if (settings.bommode == "ungrouped") {
      // expand bom table
      expandedTable = []
      for (var bomentry of bomtable) {
        for (var ref of bomentry) {
          expandedTable.push([ref]);
        }
      }
      bomtable = expandedTable;
    }
  }
  if (bomSortFunction) {
    bomtable = bomtable.sort(bomSortFunction);
  }
  for (var i in bomtable) {
    var bomentry = bomtable[i];
    if (filter && !entryMatches(bomentry)) {
      continue;
    }
    var references = null;
    var netname = null;
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    var rownum = +i + 1;
    tr.id = "bomrow" + rownum;
    td.textContent = rownum;
    tr.appendChild(td);
    if (settings.bommode == "netlist") {
      netname = bomentry;
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
      tr.appendChild(td);
    } else {
      if (reflookup) {
        references = findRefInEntry(bomentry);
        if (references.length == 0) {
          continue;
        }
      } else {
        references = bomentry;
      }
      // Filter hidden columns
      var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
      columns.forEach((column) => {
        if (column === placeholderColumn) {
          var n = 1;
          if (column === "checkboxes")
            n = settings.checkboxes.length;
          for (i = 0; i < n; i++) {
            td = placeHolderElements.shift();
            tr.appendChild(td);
          }
          return;
        } else if (column === "checkboxes") {
          for (var checkbox of settings.checkboxes) {
            if (checkbox) {
              td = document.createElement("TD");
              var input = document.createElement("input");
              input.type = "checkbox";
              input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
              setBomCheckboxState(checkbox, input, references);
              if (input.checked && settings.markWhenChecked == checkbox) {
                tr.classList.add("checked");
              }
              td.appendChild(input);
              tr.appendChild(td);
            }
          }
        } else if (column === "References") {
          td = document.createElement("TD");
          td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
          tr.appendChild(td);
        } else if (column === "Quantity" && settings.bommode == "grouped") {
          // Quantity
          td = document.createElement("TD");
          td.textContent = references.length;
          tr.appendChild(td);
        } else {
          // All the other fields
          var field_index = config.fields.indexOf(column)
          if (field_index < 0)
            return;
          var valueSet = new Set();
          references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
          td = document.createElement("TD");
          td.innerHTML = highlightFilter(Array.from(valueSet).join(", "));
          tr.appendChild(td);
        }
      });
    }
    bom.appendChild(tr);
    var handler = createRowHighlightHandler(tr.id, references, netname);
    tr.onmousemove = handler;
    highlightHandlers.push({
      id: tr.id,
      handler: handler,
    });
    if (references !== null) {
      for (var refIndex of references.map(r => r[1])) {
        footprintIndexToHandler[refIndex] = handler;
      }
    }
    if (netname !== null) {
      netsToHandler[netname] = handler;
    }
    if ((filter || reflookup) && first) {
      handler();
      first = false;
    }
  }
  EventHandler.emitEvent(
    IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
    filter: filter,
    reflookup: reflookup,
    checkboxes: settings.checkboxes,
    bommode: settings.bommode,
  });
}

function highlightPreviousRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[highlightHandlers.length - 1].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[0].id == currentHighlightedRowId) {
      highlightHandlers[highlightHandlers.length - 1].handler();
    } else {
      for (var i = 0; i < highlightHandlers.length - 1; i++) {
        if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function highlightNextRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[0].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
      highlightHandlers[0].handler();
    } else {
      for (var i = 1; i < highlightHandlers.length; i++) {
        if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function populateBomTable() {
  populateBomHeader();
  populateBomBody();
  setBomHandlers();
  resizableGrid(bomhead);
}

function footprintsClicked(footprintIndexes) {
  var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
  for (var i = 1; i <= footprintIndexes.length; i++) {
    var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
    if (refIndex in footprintIndexToHandler) {
      lastClicked = refIndex;
      footprintIndexToHandler[refIndex]();
      smoothScrollToRow(currentHighlightedRowId);
      break;
    }
  }
}

function netClicked(net) {
  if (net in netsToHandler) {
    netsToHandler[net]();
    smoothScrollToRow(currentHighlightedRowId);
  } else {
    clearHighlightedFootprints();
    highlightedNet = net;
    drawHighlights();
  }
}

function updateFilter(input) {
  filter = input.toLowerCase();
  populateBomTable();
}

function updateRefLookup(input) {
  reflookup = input.toLowerCase();
  populateBomTable();
}

function changeCanvasLayout(layout) {
  document.getElementById("fl-btn").classList.remove("depressed");
  document.getElementById("fb-btn").classList.remove("depressed");
  document.getElementById("bl-btn").classList.remove("depressed");
  switch (layout) {
    case 'F':
      document.getElementById("fl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(1);
      }
      break;
    case 'B':
      document.getElementById("bl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(0);
      }
      break;
    default:
      document.getElementById("fb-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.setSizes([50, 50]);
      }
  }
  settings.canvaslayout = layout;
  writeStorage("canvaslayout", layout);
  resizeAll();
  changeBomMode(settings.bommode);
}

function populateMetadata() {
  document.getElementById("title").innerHTML = pcbdata.metadata.title;
  document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  document.getElementById("company").innerHTML = pcbdata.metadata.company;
  document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  if (pcbdata.metadata.title != "") {
    document.title = pcbdata.metadata.title + " BOM";
  }
  // Calculate board stats
  var fp_f = 0,
    fp_b = 0,
    pads_f = 0,
    pads_b = 0,
    pads_th = 0;
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    if (pcbdata.bom.skipped.includes(i)) continue;
    var mod = pcbdata.footprints[i];
    if (mod.layer == "F") {
      fp_f++;
    } else {
      fp_b++;
    }
    for (var pad of mod.pads) {
      if (pad.type == "th") {
        pads_th++;
      } else {
        if (pad.layers.includes("F")) {
          pads_f++;
        }
        if (pad.layers.includes("B")) {
          pads_b++;
        }
      }
    }
  }
  document.getElementById("stats-components-front").innerHTML = fp_f;
  document.getElementById("stats-components-back").innerHTML = fp_b;
  document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  document.getElementById("stats-th-pads").innerHTML = pads_th;
  // Update version string
  document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
    /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}

function changeBomLayout(layout) {
  document.getElementById("bom-btn").classList.remove("depressed");
  document.getElementById("lr-btn").classList.remove("depressed");
  document.getElementById("tb-btn").classList.remove("depressed");
  switch (layout) {
    case 'bom-only':
      document.getElementById("bom-btn").classList.add("depressed");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      document.getElementById("frontcanvas").style.display = "none";
      document.getElementById("backcanvas").style.display = "none";
      document.getElementById("bot").style.height = "";
      break;
    case 'top-bottom':
      document.getElementById("tb-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.remove("split-horizontal");
      document.getElementById("canvasdiv").classList.remove("split-horizontal");
      document.getElementById("frontcanvas").classList.add("split-horizontal");
      document.getElementById("backcanvas").classList.add("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        direction: "vertical",
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        onDragEnd: resizeAll
      });
      break;
    case 'left-right':
      document.getElementById("lr-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("bot").style.height = "calc(100% - 80px)";
      document.getElementById("bomdiv").classList.add("split-horizontal");
      document.getElementById("canvasdiv").classList.add("split-horizontal");
      document.getElementById("frontcanvas").classList.remove("split-horizontal");
      document.getElementById("backcanvas").classList.remove("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        direction: "vertical",
        onDragEnd: resizeAll
      });
  }
  settings.bomlayout = layout;
  writeStorage("bomlayout", layout);
  changeCanvasLayout(settings.canvaslayout);
}

function changeBomMode(mode) {
  document.getElementById("bom-grouped-btn").classList.remove("depressed");
  document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  document.getElementById("bom-netlist-btn").classList.remove("depressed");
  var chkbxs = document.getElementsByClassName("visibility_checkbox");

  switch (mode) {
    case 'grouped':
      document.getElementById("bom-grouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'ungrouped':
      document.getElementById("bom-ungrouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'netlist':
      document.getElementById("bom-netlist-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = true;
      }
  }

  writeStorage("bommode", mode);
  if (mode != settings.bommode) {
    settings.bommode = mode;
    bomSortFunction = null;
    currentSortColumn = null;
    currentSortOrder = null;
    clearHighlightedFootprints();
  }
  populateBomTable();
}

function focusFilterField() {
  focusInputField(document.getElementById("filter"));
}

function focusRefLookupField() {
  focusInputField(document.getElementById("reflookup"));
}

function toggleBomCheckbox(bomrowid, checkboxnum) {
  if (!bomrowid || checkboxnum > settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
  checkbox.checked = !checkbox.checked;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function checkBomCheckbox(bomrowid, checkboxname) {
  var checkboxnum = 0;
  while (checkboxnum < settings.checkboxes.length &&
    settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
    checkboxnum++;
  }
  if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
  checkbox.checked = true;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function setBomCheckboxes(value) {
  writeStorage("bomCheckboxes", value);
  settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
  prepCheckboxes();
  populateMarkWhenCheckedOptions();
  setMarkWhenChecked(settings.markWhenChecked);
}

function setMarkWhenChecked(value) {
  writeStorage("markWhenChecked", value);
  settings.markWhenChecked = value;
  markedFootprints.clear();
  for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
    markedFootprints.add(ref);
  }
  populateBomTable();
  drawHighlights();
}

function prepCheckboxes() {
  var table = document.getElementById("checkbox-stats");
  while (table.childElementCount > 1) {
    table.removeChild(table.lastChild);
  }
  if (settings.checkboxes.length) {
    table.style.display = "";
  } else {
    table.style.display = "none";
  }
  for (var checkbox of settings.checkboxes) {
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    td.innerHTML = checkbox;
    tr.appendChild(td);
    td = document.createElement("TD");
    td.id = "checkbox-stats-" + checkbox;
    var progressbar = document.createElement("div");
    progressbar.classList.add("bar");
    td.appendChild(progressbar);
    var text = document.createElement("div");
    text.classList.add("text");
    td.appendChild(text);
    tr.appendChild(td);
    table.appendChild(tr);
    updateCheckboxStats(checkbox);
  }
}

function populateMarkWhenCheckedOptions() {
  var container = document.getElementById("markWhenCheckedContainer");

  if (settings.checkboxes.length == 0) {
    container.parentElement.style.display = "none";
    return;
  }

  container.innerHTML = '';
  container.parentElement.style.display = "inline-block";

  function createOption(name, displayName) {
    var id = "markWhenChecked-" + name;

    var div = document.createElement("div");
    div.classList.add("radio-container");

    var input = document.createElement("input");
    input.type = "radio";
    input.name = "markWhenChecked";
    input.value = name;
    input.id = id;
    input.onchange = () => setMarkWhenChecked(name);
    div.appendChild(input);

    // Preserve the selected element when the checkboxes change
    if (name == settings.markWhenChecked) {
      input.checked = true;
    }

    var label = document.createElement("label");
    label.innerHTML = displayName;
    label.htmlFor = id;
    div.appendChild(label);

    container.appendChild(div);
  }
  createOption("", "None");
  for (var checkbox of settings.checkboxes) {
    createOption(checkbox, checkbox);
  }
}

function updateCheckboxStats(checkbox) {
  var checked = getStoredCheckboxRefs(checkbox).size;
  var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
  var percent = checked * 100.0 / total;
  var td = document.getElementById("checkbox-stats-" + checkbox);
  td.firstChild.style.width = percent + "%";
  td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}

function constrain(number, min, max){
  return Math.min(Math.max(parseInt(number), min), max);
}

document.onkeydown = function (e) {
  switch (e.key) {
    case "n":
      if (document.activeElement.type == "text") {
        return;
      }
      if (currentHighlightedRowId !== null) {
        checkBomCheckbox(currentHighlightedRowId, "placed");
        highlightNextRow();
        e.preventDefault();
      }
      break;
    case "ArrowUp":
      highlightPreviousRow();
      e.preventDefault();
      break;
    case "ArrowDown":
      highlightNextRow();
      e.preventDefault();
      break;
    case "ArrowLeft":
    case "ArrowRight":
      if (document.activeElement.type != "text"){
        e.preventDefault();
        let boardRotationElement = document.getElementById("boardRotation")
        settings.boardRotation = parseInt(boardRotationElement.value);  // degrees / 5
        if (e.key == "ArrowLeft"){
            settings.boardRotation += 3;  // 15 degrees
        }
        else{
            settings.boardRotation -= 3;
        }
        settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
        boardRotationElement.value = settings.boardRotation
        setBoardRotation(settings.boardRotation);
      }
      break;      
    default:
      break;
  }
  if (e.altKey) {
    switch (e.key) {
      case "f":
        focusFilterField();
        e.preventDefault();
        break;
      case "r":
        focusRefLookupField();
        e.preventDefault();
        break;
      case "z":
        changeBomLayout("bom-only");
        e.preventDefault();
        break;
      case "x":
        changeBomLayout("left-right");
        e.preventDefault();
        break;
      case "c":
        changeBomLayout("top-bottom");
        e.preventDefault();
        break;
      case "v":
        changeCanvasLayout("F");
        e.preventDefault();
        break;
      case "b":
        changeCanvasLayout("FB");
        e.preventDefault();
        break;
      case "n":
        changeCanvasLayout("B");
        e.preventDefault();
        break;
      default:
        break;
    }
    if (e.key >= '1' && e.key <= '9') {
      toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
      e.preventDefault();
    }
  }
}

function hideNetlistButton() {
  document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  document.getElementById("bom-netlist-btn").style.display = "none";
}

window.onload = function (e) {
  initUtils();
  initRender();
  initStorage();
  initDefaults();
  cleanGutters();
  populateMetadata();
  dbgdiv = document.getElementById("dbg");
  bom = document.getElementById("bombody");
  bomhead = document.getElementById("bomhead");
  filter = "";
  reflookup = "";
  if (!("nets" in pcbdata)) {
    hideNetlistButton();
  }
  initDone = true;
  setBomCheckboxes(document.getElementById("bomCheckboxes").value);
  // Triggers render
  changeBomLayout(settings.bomlayout);

  // Users may leave fullscreen without touching the checkbox. Uncheck.
  document.addEventListener('fullscreenchange', () => {
    if (!document.fullscreenElement)
      document.getElementById('fullscreenCheckbox').checked = false;
  });
}

window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);

///////////////////////////////////////////////

///////////////////////////////////////////////

///////////////////////////////////////////////
  </script>
</head>

<body>

<div id="topmostdiv" class="topmostdiv">
  <div id="top">
    <div style="float: right; height: 100%;">
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="menubtn"></button>
        <div class="menu-content">
          <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
            <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
            Dark mode
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
            <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
            Full Screen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
            Fab layer
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
            Silkscreen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
            References
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
            Values
          </label>
          <div id="tracksAndZonesCheckboxes">
            <label class="menu-label" style="width: calc(50% - 18px)">
              <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
              Tracks
            </label><!-- This comment eats space! All of it!
            --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
              <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
              Zones
            </label>
          </div>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
            Pads
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
            DNP outlined
          </label>
          <label class="menu-label">
            <input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
            Highlight first pin
          </label>
          <label class="menu-label">
            <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
            Continuous redraw on drag
          </label>
          <label class="menu-label">
            <span>Board rotation</span>
            <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
            <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Bom checkboxes</div>
            <input id="bomCheckboxes" class="menu-textbox" type=text
                   oninput="setBomCheckboxes(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Mark when checked</div>
            <div id="markWhenCheckedContainer"></div>
          </label>
          <label class="menu-label">
            <span class="shameless-plug">
              <span>Created using</span>
              <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
              <a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
            </span>
          </label>
        </div>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                title="Front only">F
        </button>
        <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                title="Front and Back">FB
        </button>
        <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                title="Back only">B
        </button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                title="BOM only"></button>
        <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                title="BOM left, drawings right"></button>
        <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                title="BOM top, drawings bot"></button>
      </div>
      <div class="button-container hideonprint"
           style="float: right; position: relative; top: 8px">
        <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                title="Grouped BOM"></button>
        <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                title="Ungrouped BOM"></button>
        <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                title="Netlist"></button>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="statsbtn"></button>
        <div class="menu-content">
          <table class="stats">
            <tbody>
              <tr>
                <td width="40%">Board stats</td>
                <td>Front</td>
                <td>Back</td>
                <td>Total</td>
              </tr>
              <tr>
                <td>Components</td>
                <td id="stats-components-front">~</td>
                <td id="stats-components-back">~</td>
                <td id="stats-components-total">~</td>
              </tr>
              <tr>
                <td>Groups</td>
                <td id="stats-groups-front">~</td>
                <td id="stats-groups-back">~</td>
                <td id="stats-groups-total">~</td>
              </tr>
              <tr>
                <td>SMD pads</td>
                <td id="stats-smd-pads-front">~</td>
                <td id="stats-smd-pads-back">~</td>
                <td id="stats-smd-pads-total">~</td>
              </tr>
              <tr>
                <td>TH pads</td>
                <td colspan=3 id="stats-th-pads">~</td>
              </tr>
            </tbody>
          </table>
          <table class="stats">
            <col width="40%"/><col />
            <tbody id="checkbox-stats">
              <tr>
                <td colspan=2 style="border-top: 0">Checkboxes</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="hideonprint menu" style="float: right; top: 8px;">
        <button class="iobtn"></button>
        <div class="menu-content">
          <div class="menu-label menu-label-top">
            <div style="margin-left: 5px;">Save board image</div>
            <div class="flexbox">
              <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
              <span>X</span>
              <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
            </div>
            <label>
              <input id="render-save-transparent" type="checkbox">
              Transparent background
            </label>
            <div class="flexbox">
              <button class="savebtn" onclick="saveImage('F')">Front</button>
              <button class="savebtn" onclick="saveImage('B')">Back</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Config and checkbox state</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveSettings()">Export</button>
              <button class="savebtn" onclick="loadSettings()">Import</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Save bom table as</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveBomTable('csv')">csv</button>
              <button class="savebtn" onclick="saveBomTable('txt')">txt</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id="fileinfodiv" style="overflow: auto;">
      <table class="fileinfo">
        <tbody>
          <tr>
            <td id="title" class="title" style="width: 70%">
              Title
            </td>
            <td id="revision" class="title" style="width: 30%">
              Revision
            </td>
          </tr>
          <tr>
            <td id="company">
              Company
            </td>
            <td id="filedate">
              Date
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
  <div id="bot" class="split" style="height: calc(100% - 80px)">
    <div id="bomdiv" class="split split-horizontal">
      <div style="width: 100%">
        <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
               oninput="updateRefLookup(this.value)">
        <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
               oninput="updateFilter(this.value)">
        <div class="button-container hideonprint" style="float: left; margin: 0;">
          <button id="copy" title="Copy bom table to clipboard"
               onclick="saveBomTable('clipboard')"></button>
        </div>
      </div>
      <div id="dbg"></div>
      <table class="bom" id="bomtable">
        <thead id="bomhead">
        </thead>
        <tbody id="bombody">
        </tbody>
      </table>
    </div>
    <div id="canvasdiv" class="split split-horizontal">
      <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
      <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
    </div>
  </div>
</div>

</body>

</html>
